Browse Source

Migrate mail_environment to 10.0

pull/662/head
Guewen Baconnier 8 years ago
committed by Alexandre Fayolle
parent
commit
e9d546c6d4
  1. 6
      mail_environment/README.rst
  2. 2
      mail_environment/__init__.py
  3. 26
      mail_environment/__manifest__.py
  4. 232
      mail_environment/env_mail.py
  5. 24
      mail_environment/mail_view.xml
  6. 3
      mail_environment/models/__init__.py
  7. 74
      mail_environment/models/fetchmail_server.py
  8. 46
      mail_environment/models/ir_mail_server.py
  9. 21
      mail_environment/views/fetchmail_server_views.xml

6
mail_environment/README.rst

@ -81,11 +81,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues Bugs are tracked on `GitHub Issues
<https://github.com/OCA/server-tools/issues>`_. In case of trouble, please <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, 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 Credits
======= =======

2
mail_environment/__init__.py

@ -1,2 +1,2 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from . import env_mail
from . import models

26
mail_environment/__manifest__.py

@ -1,24 +1,10 @@
# -*- coding: utf-8 -*- # -*- 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', 'name': 'Mail configuration with server_environment',
'version': '9.0.1.0.0',
'version': '10.0.1.0.0',
'category': 'Tools', 'category': 'Tools',
'summary': 'Configure mail servers with server_environment_files', 'summary': 'Configure mail servers with server_environment_files',
'author': "Camptocamp,Odoo Community Association (OCA)", 'author': "Camptocamp,Odoo Community Association (OCA)",
@ -28,7 +14,7 @@
'server_environment', 'server_environment',
'server_environment_files', 'server_environment_files',
], ],
'data': ['mail_view.xml'],
'installable': False,
'active': False,
'data': ['views/fetchmail_server_views.xml',
],
'installable': True,
} }

232
mail_environment/env_mail.py

@ -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')
}

24
mail_environment/mail_view.xml

@ -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>

3
mail_environment/models/__init__.py

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import ir_mail_server
from . import fetchmail_server

74
mail_environment/models/fetchmail_server.py

@ -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)]

46
mail_environment/models/ir_mail_server.py

@ -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)

21
mail_environment/views/fetchmail_server_views.xml

@ -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…
Cancel
Save