Migrate mail_environment to 10.0
This commit is contained in:
parent
507126258b
commit
aa063274d0
|
|
@ -81,11 +81,7 @@ Bug Tracker
|
|||
Bugs are tracked on `GitHub Issues
|
||||
<https://github.com/OCA/server-tools/issues>`_. In case of trouble, please
|
||||
check there if your issue has already been reported. If you spotted it first,
|
||||
help us smashing it by providing a detailed and welcomed `feedback
|
||||
<https://github.com/OCA/
|
||||
server-tools/issues/new?body=module:%20
|
||||
mail_environment%0Aversion:%20
|
||||
9.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
help us smashing it by providing a detailed and welcomed feedback.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import env_mail
|
||||
from . import models
|
||||
|
|
|
|||
|
|
@ -1,24 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Author: Nicolas Bessi
|
||||
# Copyright 2012 Camptocamp SA
|
||||
#
|
||||
# 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/>.
|
||||
# Copyright 2012-2016 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
{
|
||||
'name': 'Mail configuration with server_environment',
|
||||
'version': '9.0.1.0.0',
|
||||
'version': '10.0.1.0.0',
|
||||
'category': 'Tools',
|
||||
'summary': 'Configure mail servers with server_environment_files',
|
||||
'author': "Camptocamp,Odoo Community Association (OCA)",
|
||||
|
|
@ -28,7 +14,7 @@
|
|||
'server_environment',
|
||||
'server_environment_files',
|
||||
],
|
||||
'data': ['mail_view.xml'],
|
||||
'installable': False,
|
||||
'active': False,
|
||||
'data': ['views/fetchmail_server_views.xml',
|
||||
],
|
||||
'installable': True,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,232 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Author: Nicolas Bessi
|
||||
# Copyright 2012 Camptocamp SA
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp.osv import orm, fields
|
||||
|
||||
from openerp.addons.server_environment import serv_config
|
||||
|
||||
|
||||
class IrMail(orm.Model):
|
||||
_inherit = "ir.mail_server"
|
||||
|
||||
def _get_smtp_conf(self, cr, uid, ids, name, args, context=None):
|
||||
"""
|
||||
Return configuration
|
||||
"""
|
||||
res = {}
|
||||
for mail_server in self.browse(cr, uid, ids, context=context):
|
||||
global_section_name = 'outgoing_mail'
|
||||
|
||||
# default vals
|
||||
config_vals = {'smtp_port': 587}
|
||||
if serv_config.has_section(global_section_name):
|
||||
config_vals.update((serv_config.items(global_section_name)))
|
||||
|
||||
custom_section_name = '.'.join((global_section_name,
|
||||
mail_server.name))
|
||||
if serv_config.has_section(custom_section_name):
|
||||
config_vals.update(serv_config.items(custom_section_name))
|
||||
|
||||
if config_vals.get('smtp_port'):
|
||||
config_vals['smtp_port'] = int(config_vals['smtp_port'])
|
||||
|
||||
res[mail_server.id] = config_vals
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
'smtp_host': fields.function(
|
||||
_get_smtp_conf,
|
||||
string='SMTP Server',
|
||||
type="char",
|
||||
multi='outgoing_mail_config',
|
||||
states={'draft': [('readonly', True)]},
|
||||
help="Hostname or IP of SMTP server"),
|
||||
'smtp_port': fields.function(
|
||||
_get_smtp_conf,
|
||||
string='SMTP Port',
|
||||
type="integer",
|
||||
multi='outgoing_mail_config',
|
||||
states={'draft': [('readonly', True)]},
|
||||
help="SMTP Port. Usually 465 for SSL, "
|
||||
"and 25 or 587 for other cases.",
|
||||
size=5),
|
||||
'smtp_user': fields.function(
|
||||
_get_smtp_conf,
|
||||
string='Username',
|
||||
type="char",
|
||||
multi='outgoing_mail_config',
|
||||
states={'draft': [('readonly', True)]},
|
||||
help="Optional username for SMTP authentication",
|
||||
size=64),
|
||||
'smtp_pass': fields.function(
|
||||
_get_smtp_conf,
|
||||
string='Password',
|
||||
type="char",
|
||||
multi='outgoing_mail_config',
|
||||
states={'draft': [('readonly', True)]},
|
||||
help="Optional password for SMTP authentication",
|
||||
size=64),
|
||||
'smtp_encryption': fields.function(
|
||||
_get_smtp_conf,
|
||||
string='smtp_encryption',
|
||||
type="selection",
|
||||
multi='outgoing_mail_config',
|
||||
selection=[('none', 'None'),
|
||||
('starttls', 'TLS (STARTTLS)'),
|
||||
('ssl', 'SSL/TLS')],
|
||||
states={'draft': [('readonly', True)]},
|
||||
help="Choose the connection encryption scheme:\n"
|
||||
"- none: SMTP sessions are done in cleartext.\n"
|
||||
"- starttls: TLS encryption is requested at start "
|
||||
"of SMTP session (Recommended)\n"
|
||||
"- ssl: SMTP sessions are encrypted with SSL/TLS "
|
||||
"through a dedicated port (default: 465)")
|
||||
}
|
||||
|
||||
|
||||
class FetchmailServer(orm.Model):
|
||||
"""Incoming POP/IMAP mail server account"""
|
||||
_inherit = 'fetchmail.server'
|
||||
|
||||
def _get_incom_conf(self, cr, uid, ids, name, args, context=None):
|
||||
"""
|
||||
Return configuration
|
||||
"""
|
||||
res = {}
|
||||
for fetchmail in self.browse(cr, uid, ids, context=context):
|
||||
global_section_name = 'incoming_mail'
|
||||
|
||||
key_types = {'port': int,
|
||||
'is_ssl': lambda a: bool(int(a)),
|
||||
'attach': lambda a: bool(int(a)),
|
||||
'original': lambda a: bool(int(a)),
|
||||
}
|
||||
|
||||
# default vals
|
||||
config_vals = {'port': 993,
|
||||
'is_ssl': 0,
|
||||
'attach': 0,
|
||||
'original': 0,
|
||||
}
|
||||
if serv_config.has_section(global_section_name):
|
||||
config_vals.update(serv_config.items(global_section_name))
|
||||
|
||||
custom_section_name = '.'.join((global_section_name,
|
||||
fetchmail.name))
|
||||
if serv_config.has_section(custom_section_name):
|
||||
config_vals.update(serv_config.items(custom_section_name))
|
||||
|
||||
for key, to_type in key_types.iteritems():
|
||||
if config_vals.get(key):
|
||||
config_vals[key] = to_type(config_vals[key])
|
||||
res[fetchmail.id] = config_vals
|
||||
return res
|
||||
|
||||
def _type_search(self, cr, uid, obj, name, args, context=None):
|
||||
result_ids = []
|
||||
# read all incoming servers values
|
||||
all_ids = self.search(cr, uid, [], context=context)
|
||||
results = self.read(cr, uid, all_ids, ['id', 'type'], context=context)
|
||||
args = args[:]
|
||||
i = 0
|
||||
while i < len(args):
|
||||
operator = args[i][1]
|
||||
if operator == '=':
|
||||
for res in results:
|
||||
if (res['type'] == args[i][2] and
|
||||
res['id'] not in result_ids):
|
||||
result_ids.append(res['id'])
|
||||
elif operator == 'in':
|
||||
for search_vals in args[i][2]:
|
||||
for res in results:
|
||||
if (res['type'] == search_vals and
|
||||
res['id'] not in result_ids):
|
||||
result_ids.append(res['id'])
|
||||
else:
|
||||
continue
|
||||
i += 1
|
||||
return [('id', 'in', result_ids)]
|
||||
|
||||
_columns = {
|
||||
'server': fields.function(
|
||||
_get_incom_conf,
|
||||
string='Server',
|
||||
type="char",
|
||||
multi='income_mail_config',
|
||||
states={'draft': [('readonly', True)]},
|
||||
help="Hostname or IP of the mail server"),
|
||||
'port': fields.function(
|
||||
_get_incom_conf,
|
||||
string='Port',
|
||||
type="integer",
|
||||
states={'draft': [('readonly', True)]},
|
||||
multi='income_mail_config'),
|
||||
'type': fields.function(
|
||||
_get_incom_conf,
|
||||
string='Type',
|
||||
type="selection",
|
||||
selection=[('pop', 'POP Server'),
|
||||
('imap', 'IMAP Server'),
|
||||
('local', 'Local Server'),
|
||||
],
|
||||
multi='income_mail_config',
|
||||
fnct_search=_type_search,
|
||||
states={'draft': [('readonly', True)]},
|
||||
help="pop, imap, local"),
|
||||
'is_ssl': fields.function(
|
||||
_get_incom_conf,
|
||||
string='Is SSL',
|
||||
type="boolean",
|
||||
multi='income_mail_config',
|
||||
states={'draft': [('readonly', True)]},
|
||||
help='Connections are encrypted with SSL/TLS through'
|
||||
' a dedicated port (default: IMAPS=993, POP3S=995)'),
|
||||
'attach': fields.function(
|
||||
_get_incom_conf,
|
||||
string='Keep Attachments',
|
||||
type="boolean",
|
||||
multi='income_mail_config',
|
||||
states={'draft': [('readonly', True)]},
|
||||
help="Whether attachments should be downloaded. "
|
||||
"If not enabled, incoming emails will be stripped of any "
|
||||
"attachments before being processed"),
|
||||
'original': fields.function(
|
||||
_get_incom_conf,
|
||||
string='Keep Original',
|
||||
type="boolean",
|
||||
multi='income_mail_config',
|
||||
states={'draft': [('readonly', True)]},
|
||||
help="Whether a full original copy of each email should be kept "
|
||||
"for reference and attached to each processed message. This "
|
||||
"will usually double the size of your message database."),
|
||||
'user': fields.function(
|
||||
_get_incom_conf,
|
||||
string='Username',
|
||||
type="char",
|
||||
states={'draft': [('readonly', True)]},
|
||||
multi='income_mail_config'),
|
||||
'password': fields.function(
|
||||
_get_incom_conf,
|
||||
string='password',
|
||||
type="char",
|
||||
states={'draft': [('readonly', True)]},
|
||||
multi='income_mail_config')
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="inherit_fetchmail">
|
||||
<field name="name">inherit_fetchmail_for_env_support</field>
|
||||
<field name="model">fetchmail.server</field>
|
||||
<field name="inherit_id" ref="fetchmail.view_email_server_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="server" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
<field name="port" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
<field name="user" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
<field name="password" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import ir_mail_server
|
||||
from . import fetchmail_server
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2012-2016 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
import operator
|
||||
from odoo import api, fields, models
|
||||
|
||||
from odoo.addons.server_environment import serv_config
|
||||
|
||||
|
||||
class FetchmailServer(models.Model):
|
||||
"""Incoming POP/IMAP mail server account"""
|
||||
_inherit = 'fetchmail.server'
|
||||
|
||||
server = fields.Char(compute='_compute_server_env',
|
||||
states={})
|
||||
port = fields.Integer(compute='_compute_server_env',
|
||||
states={})
|
||||
type = fields.Selection(compute='_compute_server_env',
|
||||
search='_search_type',
|
||||
states={})
|
||||
user = fields.Char(compute='_compute_server_env',
|
||||
states={})
|
||||
password = fields.Char(compute='_compute_server_env',
|
||||
states={})
|
||||
is_ssl = fields.Boolean(compute='_compute_server_env')
|
||||
attach = fields.Boolean(compute='_compute_server_env')
|
||||
original = fields.Boolean(compute='_compute_server_env')
|
||||
|
||||
@api.depends()
|
||||
def _compute_server_env(self):
|
||||
for fetchmail in self:
|
||||
global_section_name = 'incoming_mail'
|
||||
|
||||
key_types = {'port': int,
|
||||
'is_ssl': lambda a: bool(int(a or 0)),
|
||||
'attach': lambda a: bool(int(a or 0)),
|
||||
'original': lambda a: bool(int(a or 0)),
|
||||
}
|
||||
|
||||
# default vals
|
||||
config_vals = {'port': 993,
|
||||
'is_ssl': 0,
|
||||
'attach': 0,
|
||||
'original': 0,
|
||||
}
|
||||
if serv_config.has_section(global_section_name):
|
||||
config_vals.update(serv_config.items(global_section_name))
|
||||
|
||||
custom_section_name = '.'.join((global_section_name,
|
||||
fetchmail.name))
|
||||
if serv_config.has_section(custom_section_name):
|
||||
config_vals.update(serv_config.items(custom_section_name))
|
||||
|
||||
for key, to_type in key_types.iteritems():
|
||||
if config_vals.get(key):
|
||||
config_vals[key] = to_type(config_vals[key])
|
||||
|
||||
fetchmail.update(config_vals)
|
||||
|
||||
@api.model
|
||||
def _search_type(self, oper, value):
|
||||
operators = {
|
||||
'=': operator.eq,
|
||||
'!=': operator.ne,
|
||||
'in': operator.contains,
|
||||
'not in': lambda a, b: not operator.contains(a, b),
|
||||
}
|
||||
if oper not in operators:
|
||||
return [('id', 'in', [])]
|
||||
servers = self.search([]).filtered(
|
||||
lambda s: operators[oper](value, s.type)
|
||||
)
|
||||
return [('id', 'in', servers.ids)]
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Copyright 2012-2016 Camptocamp SA
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
from odoo.addons.server_environment import serv_config
|
||||
|
||||
|
||||
class IrMailServer(models.Model):
|
||||
_inherit = "ir.mail_server"
|
||||
|
||||
smtp_host = fields.Char(compute='_compute_server_env',
|
||||
required=False,
|
||||
readonly=True)
|
||||
smtp_port = fields.Integer(compute='_compute_server_env',
|
||||
required=False,
|
||||
readonly=True)
|
||||
smtp_user = fields.Char(compute='_compute_server_env',
|
||||
required=False,
|
||||
readonly=True)
|
||||
smtp_pass = fields.Char(compute='_compute_server_env',
|
||||
required=False,
|
||||
readonly=True)
|
||||
smtp_encryption = fields.Selection(compute='_compute_server_env',
|
||||
required=False,
|
||||
readonly=True)
|
||||
|
||||
@api.depends()
|
||||
def _compute_server_env(self):
|
||||
for server in self:
|
||||
global_section_name = 'outgoing_mail'
|
||||
|
||||
# default vals
|
||||
config_vals = {'smtp_port': 587}
|
||||
if serv_config.has_section(global_section_name):
|
||||
config_vals.update((serv_config.items(global_section_name)))
|
||||
|
||||
custom_section_name = '.'.join((global_section_name, server.name))
|
||||
if serv_config.has_section(custom_section_name):
|
||||
config_vals.update(serv_config.items(custom_section_name))
|
||||
|
||||
if config_vals.get('smtp_port'):
|
||||
config_vals['smtp_port'] = int(config_vals['smtp_port'])
|
||||
|
||||
server.update(config_vals)
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record model="ir.ui.view" id="inherit_fetchmail">
|
||||
<field name="model">fetchmail.server</field>
|
||||
<field name="inherit_id" ref="fetchmail.view_email_server_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="server" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
<field name="port" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
<field name="user" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
<field name="password" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Loading…
Reference in New Issue