summaryrefslogtreecommitdiff
path: root/addons/mail
diff options
context:
space:
mode:
authorOlivier Dony <odo@openerp.com>2012-07-03 18:01:55 +0200
committerOlivier Dony <odo@openerp.com>2012-07-03 18:01:55 +0200
commitf66753362b5d83ba0bef5cb7da2be8d257e5fbb3 (patch)
tree74a1a9244693ea1ce0ffb7b90f8e1c754e5af1dd /addons/mail
parent234118ddb76f6d72a773fd5dda086522aba3ae6a (diff)
parent790f64cca643d6ef2a259c56552a3b17895f3b87 (diff)
[MERGE] Implementation of mail.alias by Jigar Amin
bzr revid: odo@openerp.com-20120703160155-gw8po01vmm0q30ow
Diffstat (limited to 'addons/mail')
-rw-r--r--addons/mail/__init__.py2
-rw-r--r--addons/mail/__openerp__.py6
-rw-r--r--addons/mail/mail_alias.py72
-rw-r--r--addons/mail/mail_alias_data.xml9
-rw-r--r--addons/mail/mail_alias_view.xml73
-rw-r--r--addons/mail/mail_data.xml13
-rw-r--r--addons/mail/mail_group.py28
-rw-r--r--addons/mail/mail_group_view.xml3
-rw-r--r--addons/mail/mail_thread.py54
-rw-r--r--addons/mail/res_users.py32
-rw-r--r--addons/mail/res_users_view.xml3
-rw-r--r--addons/mail/security/ir.model.access.csv2
-rwxr-xr-xaddons/mail/static/scripts/openerp_mailgate.py44
-rw-r--r--addons/mail/user_mail_alias_demo.xml17
-rw-r--r--addons/mail/wizard/__init__.py2
-rw-r--r--addons/mail/wizard/update_mail_alias.py36
-rw-r--r--addons/mail/wizard/update_mail_alias_wizard.xml50
17 files changed, 399 insertions, 47 deletions
diff --git a/addons/mail/__init__.py b/addons/mail/__init__.py
index 4c313338ceb..f06b4536040 100644
--- a/addons/mail/__init__.py
+++ b/addons/mail/__init__.py
@@ -19,11 +19,11 @@
#
##############################################################################
+import mail_alias
import mail_message
import mail_thread
import mail_group
import mail_subscription
-import mail_alias
import res_users
import res_partner
import report
diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py
index 95ce7d5619d..5c0afc27ec1 100644
--- a/addons/mail/__openerp__.py
+++ b/addons/mail/__openerp__.py
@@ -56,7 +56,9 @@ The main features are:
'depends': ['base', 'base_tools'],
'data': [
'wizard/mail_compose_message_view.xml',
+ 'wizard/update_mail_alias_wizard.xml',
'mail_message_view.xml',
+ 'mail_alias_data.xml',
'mail_subscription_view.xml',
'mail_thread_view.xml',
'mail_group_view.xml',
@@ -66,6 +68,10 @@ The main features are:
'mail_data.xml',
'mail_group_data.xml',
'res_users_view.xml',
+ 'mail_alias_view.xml',
+ ],
+ 'demo_xml': [
+ 'user_mail_alias_demo.xml',
],
'installable': True,
'auto_install': False,
diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py
index b5aa6f6d76a..292b2f742cd 100644
--- a/addons/mail/mail_alias.py
+++ b/addons/mail/mail_alias.py
@@ -20,6 +20,7 @@
##############################################################################
from openerp.osv import fields, osv
+from tools.translate import _
class mail_alias(osv.Model):
"""A Mail Alias is a mapping of an email address with a given OpenERP Document
@@ -39,8 +40,8 @@ class mail_alias(osv.Model):
_rec_name = 'alias_name'
_columns = {
- 'alias_name': fields.char('Mailbox Alias', required=True,
- help="The name of the mailbox alias, e.g. `jobs' "
+ 'alias_name': fields.char('Mailbox Alias', size=255, required=True,
+ help="The name of the mailbox alias, e.g. 'jobs' "
"if you want to catch emails for <jobs@example.my.openerp.com>",),
'alias_model_id': fields.many2one('ir.model', 'Aliased Model', required=True,
help="The model (OpenERP Document Kind) to which this alias "
@@ -48,7 +49,9 @@ class mail_alias(osv.Model):
"existing record will cause the creation of a new record "
"of this model (e.g. a Project Task)",
# only allow selecting mail_thread models!
- domain="[('field_ids', 'in', 'message_ids')]"),
+ #TODO kept doamin temporarily in comment, need to redefine domain
+ #domain="[('field_id', 'in', 'message_ids')]"
+ ),
'alias_user_id': fields.many2one('res.users', 'Owner',
help="The owner of records created upon receiving emails on this alias. "
"If this field is kept empty the system will attempt to find the right owner "
@@ -64,19 +67,54 @@ class mail_alias(osv.Model):
}
_defaults = {
'alias_defaults': '{}',
- 'alias_user_id': lambda s,c,u,ctx: u
+ 'alias_user_id': lambda self,cr,uid, context: uid
}
- _sql_constraint = [
- ('mailbox_uniq', 'unique (alias_name)', 'Unfortunately this mail alias is already used, please choose a unique one')
+ _sql_constraints = [
+ ('mailbox_uniq', 'UNIQUE(alias_name)', 'Unfortunately this mail alias is already used, please choose a unique one')
]
-
- def create_unique_alias(self, cr, uid, values, context=None):
- # TODO: call create() with `values` after checking that `alias_name`
- # is unique. If not unique, append a sequential number after it until
- # a unique one if found.
- # E.g if create_unique_alias is called with {'alias_name': 'abc'}
- # and 'abc', 'abc1', 'abc2' alias exist, replace alias_name with 'abc3'.
- return
-
-
- \ No newline at end of file
+
+ def _check_alias_defaults(self, cr, uid, ids, context=None):
+ """
+ Strick constraints checking for the alias defaults values.
+ it must follow the python dict format. So message_catachall
+ will not face any issue.
+ """
+ for record in self.browse(cr, uid, ids, context=context):
+ try:
+ dict(eval(record.alias_defaults))
+ return True
+ except:
+ return False
+
+ _constraints = [
+ (_check_alias_defaults, "Default Values are in wrong format.\nIt must be in python dictionary format e.g.{'field_name': 'value' or {}}", ['alias_defaults']),
+ ]
+
+ def name_get(self, cr, uid, ids, context=None):
+ """
+ Return the mail alias display alias_name, inclusing the Implicit and dynamic
+ Email Alias Domain from config.
+ e.g. `jobs@openerp.my.openerp.com` or `sales@openerp.my.openerp.com`
+ """
+ if context is None:
+ context = {}
+ res = []
+ config_parameter_pool = self.pool.get("ir.config_parameter")
+ domain = config_parameter_pool.get_param(cr, uid, "mail.catchall.domain", context=context)
+ for record in self.read(cr, uid, ids, ['alias_name'], context=context):
+ domain_alias = "%s@%s"%(record['alias_name'], domain)
+ res.append((record['id'], domain_alias))
+ return res
+
+ def create_unique_alias(self, cr, uid, values, sequence=1 ,context=None):
+ if sequence:
+ prob_alias = "%s%s"%(values['alias_name'], sequence)
+ search_alias = self.search(cr, uid, [('alias_name', '=', prob_alias)])
+ if search_alias:
+ values = self.create_unique_alias(cr, uid, values, sequence+1, context)
+ else:
+ values.update({'alias_name': prob_alias})
+ return values
+ else:
+ return values.update({'alias_name': "%s"%(values['alias_name'])})
+
diff --git a/addons/mail/mail_alias_data.xml b/addons/mail/mail_alias_data.xml
new file mode 100644
index 00000000000..041c1dd3316
--- /dev/null
+++ b/addons/mail/mail_alias_data.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+ <record model="ir.config_parameter" id="user_mail_alias">
+ <field name="key">mail.catchall.domain</field>
+ <field name="value">openerp.my.openerp.com</field>
+ </record>
+ </data>
+</openerp>
diff --git a/addons/mail/mail_alias_view.xml b/addons/mail/mail_alias_view.xml
new file mode 100644
index 00000000000..e72143bdb9a
--- /dev/null
+++ b/addons/mail/mail_alias_view.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0"?>
+<openerp>
+ <data>
+
+ <!-- Alias Form View !-->
+ <record model="ir.ui.view" id="view_mail_alias_form">
+ <field name="name">mail.alias.form</field>
+ <field name="model">mail.alias</field>
+ <field name="type">form</field>
+ <field name="priority" eval="10"/>
+ <field name="arch" type="xml">
+ <form string="Alias" version="7.0">
+ <sheet>
+ <group colspan="4" col="4">
+ <field name="alias_name"/>
+ <field name="alias_model_id" readonly="1"/>
+ <field name="alias_user_id"/>
+ <field name="alias_force_thread_id"/>
+ <field name="alias_defaults"/>
+ </group>
+ </sheet>
+ </form>
+ </field>
+ </record>
+
+ <!-- Alias List View !-->
+ <record model="ir.ui.view" id="view_mail_alias_tree">
+ <field name="name">mail.alias.tree</field>
+ <field name="model">mail.alias</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <tree string="Alias">
+ <field name="alias_name"/>
+ <field name="alias_model_id"/>
+ <field name="alias_user_id"/>
+ <field name="alias_defaults"/>
+ </tree>
+ </field>
+ </record>
+
+ <!-- Alias Search View !-->
+ <record model="ir.ui.view" id="view_mail_alias_search">
+ <field name="name">mail.alias.search</field>
+ <field name="model">mail.alias</field>
+ <field name="type">search</field>
+ <field name="arch" type="xml">
+ <search string="Search Alias">
+ <field name="alias_name"/>
+ <field name="alias_model_id"/>
+ <group expand="0" string="Group By...">
+ <filter string="User" name="User" icon="terp-personal" context="{'group_by':'alias_user_id'}"/>
+ <filter string="Model" name="Model" context="{'group_by':'alias_model_id'}"/>
+ </group>
+ </search>
+ </field>
+ </record>
+
+ <record id="action_view_mail_alias" model="ir.actions.act_window">
+ <field name="name">Mail Alias</field>
+ <field name="res_model">mail.alias</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">tree,form</field>
+ <field name="search_view_id" ref="view_mail_alias_search"/>
+ </record>
+
+ <menuitem id="mail_alias_menu"
+ parent="base.menu_email"
+ action="action_view_mail_alias"
+ sequence="50"
+ groups="base.group_no_one"/>
+
+ </data>
+</openerp>
diff --git a/addons/mail/mail_data.xml b/addons/mail/mail_data.xml
index c8e8b1a488e..2448b89fcd6 100644
--- a/addons/mail/mail_data.xml
+++ b/addons/mail/mail_data.xml
@@ -12,5 +12,18 @@
<field eval="'process_email_queue'" name="function"/>
<field eval="'()'" name="args"/>
</record>
+
+ <record id="mail_alias_root_user" model="mail.alias">
+ <field name="alias_name">admin</field>
+ <field name="alias_model_id" ref="model_res_users"/>
+ <field name="alias_user_id" ref="base.user_root"/>
+ <field name="alias_force_thread_id" ref="base.user_root"/>
+ <field name="alias_defaults">{}</field>
+ </record>
+
+ <record model="res.users" id="base.user_root">
+ <field name="alias_id" ref="mail_alias_root_user"/>
+ </record>
+
</data>
</openerp>
diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py
index 0a8677d7862..41d2d0a148e 100644
--- a/addons/mail/mail_group.py
+++ b/addons/mail/mail_group.py
@@ -30,6 +30,7 @@ from PIL import Image
import StringIO
import tools
from tools.translate import _
+from lxml import etree
class mail_group(osv.osv):
"""
@@ -48,7 +49,7 @@ class mail_group(osv.osv):
_description = 'Discussion group'
_name = 'mail.group'
_inherit = ['mail.thread']
-
+ _inherits = {'mail.alias': 'alias_id'}
def action_group_join(self, cr, uid, ids, context={}):
return self.message_subscribe(cr, uid, ids, context=context);
@@ -129,6 +130,7 @@ class mail_group(osv.osv):
'member_count': fields.function(get_member_ids, type='integer', string='Member count', multi='get_member_ids'),
'is_subscriber': fields.function(get_member_ids, type='boolean', string='Joined', multi='get_member_ids'),
'last_month_msg_nbr': fields.function(get_last_month_msg_nbr, type='integer', string='Messages count for last month'),
+ 'alias_id': fields.many2one('mail.alias', 'Mail Alias', ondelete="cascade", required=True)
}
_defaults = {
@@ -136,3 +138,27 @@ class mail_group(osv.osv):
'responsible_id': (lambda s, cr, uid, ctx: uid),
'photo': _get_default_photo,
}
+
+ def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
+ res = super(mail_group,self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
+ if view_type == 'form':
+ domain = self.pool.get("ir.config_parameter").get_param(cr, uid, "mail.catchall.domain", context=context)
+ if not domain:
+ doc = etree.XML(res['arch'])
+ alias_node = doc.xpath("//field[@name='alias_id']")[0]
+ parent = alias_node.getparent()
+ parent.remove(alias_node)
+ res['arch'] = etree.tostring(doc)
+ return res
+
+ def create(self, cr, uid, vals, context=None):
+ model_pool = self.pool.get('ir.model.data')
+ alias_pool = self.pool.get('mail.alias')
+ model, res_id = model_pool.get_object_reference( cr, uid, "mail", "model_mail_group")
+ vals.update({'alias_name': "mailing-group",
+ 'alias_model_id': res_id})
+ alias_pool.create_unique_alias(cr, uid, vals, context=context)
+ res = super( mail_group, self).create(cr, uid, vals, context)
+ record = self.read(cr, uid, res, context)
+ alias_pool.write(cr, uid, [record['alias_id']], {"alias_force_thread_id":record['id']}, context)
+ return res
diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml
index 921c3b528c4..b02447576e9 100644
--- a/addons/mail/mail_group_view.xml
+++ b/addons/mail/mail_group_view.xml
@@ -69,6 +69,9 @@
<field name="public" class="oe_inline"/>
</div>
<field name="description" colspan="4" nolabel="1"/>
+ <div class="oe_edit_only">
+ <field name="alias_id" required="0" domain="[('alias_model_id','=','mail.group')]" />
+ </div>
</div>
</div>
<footer>
diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py
index 03b6b5a02c6..2e1d653d6b7 100644
--- a/addons/mail/mail_thread.py
+++ b/addons/mail/mail_thread.py
@@ -475,11 +475,57 @@ class mail_thread(osv.osv):
return msgs
- def message_catchall(self, cr, uid, message, context=None):
- """TODO proper docstring, inspired by messsage_process()"""
- # TODO
- pass
+ def _get_user(self, cr, uid, alias, context):
+ """
+ param alias: browse record of alias.
+ return: int user_id.
+ """
+
+ user_obj = self.pool.get('res.user')
+ user_id = 1
+ if alias.alias_user_id:
+ user_id = alias.alias_user_id.id
+ #if user_id not defined in the alias then search related user using name of Email sender
+ else:
+ from_email = msg.get('from')
+ user_ids = user_obj.search(cr, uid, [('name','=',from_email)], context)
+ if user_ids:
+ user_id = user_obj.browse(cr, uid, user_ids[0], context).id
+ return user_id
+ def message_catchall(self, cr, uid, message, context=None):
+ """
+ Process incoming mail and call messsage_process using details of the mail.alias model
+ else raise Exception so that mailgate script will reject the mail and
+ send notification mail sender that this mailbox does not exist so your mail have been rejected.
+ """
+
+ alias_pool = self.pool.get('mail.alias')
+ user_pool = self.pool.get('res.users')
+ mail_compose_pool = self.pool.get('mail.compose.message')
+ mail_message_pool = self.pool.get('mail.message')
+ if isinstance(message, xmlrpclib.Binary):
+ message = str(message.data)
+ if isinstance(message, unicode):
+ message = message.encode('utf-8')
+ msg_txt = email.message_from_string(message)
+ msg = mail_message_pool.parse_message(msg_txt)
+ alias_name = msg.get('to').split("@")[0]
+ alias_ids = alias_pool.search(cr, uid, [('alias_name','=',alias_name)])
+ #if alias found then call message_process method.
+ if alias_ids:
+ alias_id = alias_pool.browse(cr, uid, alias_ids[0], context)
+ user_id = self._get_user( cr, uid, alias_id, context)
+ alias_defaults = dict(eval(alias_id.alias_defaults or {}))
+ self.message_process(cr, user_id, alias_id.alias_model_id.model, message,
+ custom_values = alias_defaults,
+ thread_id = alias_id.alias_force_thread_id or False,
+ context=context)
+ else:
+ #if Mail box for the intended Mail Alias then give logger warning
+ _logger.warning("No Mail Alias Found for the name '%s'."%(alias_name))
+ raise
+ return True
#------------------------------------------------------
# Email specific
diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py
index f62e29fb44d..e9a9d1222b7 100644
--- a/addons/mail/res_users.py
+++ b/addons/mail/res_users.py
@@ -21,6 +21,7 @@
from osv import osv, fields
from tools.translate import _
+from lxml import etree
class res_users(osv.osv):
""" Update of res.users class
@@ -29,6 +30,7 @@ class res_users(osv.osv):
"""
_name = 'res.users'
_inherit = ['res.users', 'mail.thread']
+ _inherits = {'mail.alias': 'alias_id'}
_columns = {
'notification_email_pref': fields.selection([
@@ -38,6 +40,7 @@ class res_users(osv.osv):
('none', 'Never')
], 'Receive Feeds by Email', required=True,
help="Choose in which case you want to receive an email when you receive new feeds."),
+ 'alias_id': fields.many2one('mail.alias', 'Mail Alias', ondelete="cascade", required=True),
}
_defaults = {
@@ -55,9 +58,28 @@ class res_users(osv.osv):
self.SELF_WRITEABLE_FIELDS.append('notification_email_pref')
return init_res
+ def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
+ res = super(res_users,self).fields_view_get(cr, uid, view_id, view_type, context, toolbar=toolbar, submenu=submenu)
+ if view_type == 'form':
+ domain = self.pool.get("ir.config_parameter").get_param(cr, uid, "mail.catchall.domain", context=context)
+ if not domain:
+ doc = etree.XML(res['arch'])
+ alias_node = doc.xpath("//field[@name='alias_id']")[0]
+ parent = alias_node.getparent()
+ parent.remove(alias_node)
+ res['arch'] = etree.tostring(doc)
+ return res
+
def create(self, cr, uid, data, context=None):
+ # create default alias same as the login
+ model_pool = self.pool.get('ir.model.data')
+ alias_pool = self.pool.get('mail.alias')
+ res_id = model_pool.get_object( cr, uid, "mail", "model_res_users")
+ data.update({'alias_name': data.get('login'),
+ 'alias_model_id': res_id.id})
user_id = super(res_users, self).create(cr, uid, data, context=context)
- user = self.browse(cr, uid, [user_id], context=context)[0]
+ user = self.browse(cr, uid, user_id, context=context)
+ alias_pool.write(cr, uid, [user.alias_id.id], {"alias_force_thread_id": user.id}, context)
# make user follow itself
self.message_subscribe(cr, uid, [user_id], [user_id], context=context)
# create a welcome message to broadcast
@@ -66,7 +88,15 @@ class res_users(osv.osv):
# TODO: clean the broadcast feature. As this is not cleany specified, temporarily remove the message broadcasting that is not buggy but not very nice.
#self.message_broadcast(cr, uid, [user.id], 'Welcome notification', message, context=context)
return user_id
+
+ def write(self, cr, uid, ids, vals, context=None):
+ # if login of user have been changed then change alias of user also.
+ if 'login' in vals.keys():
+ for user in self.browse(cr, uid, ids, context=context):
+ self.pool.get('mail.alias').write(cr, uid, [user.alias_id.id], {'alias_name': vals['login']}, context=context)
+ return super(res_users, self).write(cr, uid, ids, vals, context=context)
+
def message_load_ids(self, cr, uid, ids, limit=100, offset=0, domain=[], ascent=False, root_ids=[False], context=None):
""" Override of message_load_ids
User discussion page :
diff --git a/addons/mail/res_users_view.xml b/addons/mail/res_users_view.xml
index 428f53d092e..9af90efebae 100644
--- a/addons/mail/res_users_view.xml
+++ b/addons/mail/res_users_view.xml
@@ -31,6 +31,9 @@
<field name="message_ids" colspan="4" widget="ThreadView" nolabel="1"/>
</div>
</xpath>
+ <field name="active" position="after">
+ <field name="alias_id" readonly="1" required="0"/>
+ </field>
</data>
</field>
</record>
diff --git a/addons/mail/security/ir.model.access.csv b/addons/mail/security/ir.model.access.csv
index 011e8b27dc5..d4146271a29 100644
--- a/addons/mail/security/ir.model.access.csv
+++ b/addons/mail/security/ir.model.access.csv
@@ -5,3 +5,5 @@ access_mail_thread,mail.thread,model_mail_thread,base.group_user,1,1,1,0
access_mail_subscription,mail.subscription,model_mail_subscription,,1,1,1,1
access_mail_notification,mail.notification,model_mail_notification,,1,1,1,1
access_mail_group,mail.group,model_mail_group,base.group_user,1,1,1,1
+access_mail_alias_user,mail.alias,model_mail_alias,base.group_user,1,1,1,0
+access_mail_alias_system,mail.alias,model_mail_alias,base.group_system,1,1,1,1
diff --git a/addons/mail/static/scripts/openerp_mailgate.py b/addons/mail/static/scripts/openerp_mailgate.py
index 68ae20d35e3..64dafc56785 100755
--- a/addons/mail/static/scripts/openerp_mailgate.py
+++ b/addons/mail/static/scripts/openerp_mailgate.py
@@ -94,22 +94,23 @@ class RPCProxy(object):
return self.rpc.execute(self.dbname, self.user_id, self.passwd, *request, **kwargs)
class EmailParser(object):
- def __init__(self, uid, password, model, email_default, dbname, host, port):
+ def __init__(self, uid, password, dbname, host, port, model=False, email_default=False):
self.rpc = RPCProxy(uid, password, host=host, port=port, dbname=dbname)
- try:
- self.model_id = int(model)
- self.model = str(model)
- except:
- self.model_id = self.rpc('ir.model', 'search', [('model', '=', model)])[0]
- self.model = str(model)
- self.email_default = email_default
+ if model:
+ try:
+ self.model_id = int(model)
+ self.model = str(model)
+ except:
+ self.model_id = self.rpc('ir.model', 'search', [('model', '=', model)])[0]
+ self.model = str(model)
+ self.email_default = email_default
- def parse(self, message, custom_values=None, save_original=None):
+ def parse(self, method, message, custom_values=None, save_original=None):
# pass message as bytes because we don't know its encoding until we parse its headers
# and hence can't convert it to utf-8 for transport
res_id = self.rpc('mail.thread',
- 'message_process',
+ method,
self.model,
xmlrpclib.Binary(message),
custom_values or {},
@@ -156,30 +157,29 @@ def main():
"""
Receive the email via the stdin and send it to the OpenERP Server
"""
+
parser = configure_parser()
(options, args) = parser.parse_args()
-
-
+ method = "message_process"
email_parser = EmailParser(options.userid,
options.password,
- options.model,
- options.default,
- dbname=options.dbname,
- host=options.host,
- port=options.port)
-
-
+ options.dbname,
+ options.host,
+ options.port,
+ model=options.model,
+ email_default= options.default)
msg_txt = sys.stdin.read()
-
custom_values = {}
+ if not options.model:
+ method = "message_catchall"
try:
- custom_values = dict(eval(options.custom_values or {} ))
+ custom_values = dict(eval(options.custom_values or "{}" ))
except:
import traceback
traceback.print_exc()
try:
- email_parser.parse(msg_txt, custom_values, options.save_original or False)
+ email_parser.parse(method, msg_txt, custom_values, options.save_original or False)
except Exception:
msg = '\n'.join([
'parameters',
diff --git a/addons/mail/user_mail_alias_demo.xml b/addons/mail/user_mail_alias_demo.xml
new file mode 100644
index 00000000000..eea7d521776
--- /dev/null
+++ b/addons/mail/user_mail_alias_demo.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data noupdate="1">
+ <record id="mail_alias_demo_user" model="mail.alias">
+ <field name="alias_name">demo</field>
+ <field name="alias_model_id" ref="model_res_users"/>
+ <field name="alias_user_id" ref="base.user_root"/>
+ <field name="alias_force_thread_id" ref="base.user_demo"/>
+ <field name="alias_defaults">{}</field>
+ </record>
+
+ <record model="res.users" id="base.user_demo">
+ <field name="alias_id" ref="mail_alias_demo_user"/>
+ </record>
+
+ </data>
+</openerp>
diff --git a/addons/mail/wizard/__init__.py b/addons/mail/wizard/__init__.py
index 88b9581f68e..bf35381fc94 100644
--- a/addons/mail/wizard/__init__.py
+++ b/addons/mail/wizard/__init__.py
@@ -20,5 +20,5 @@
##############################################################################
import mail_compose_message
-
+import update_mail_alias
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/mail/wizard/update_mail_alias.py b/addons/mail/wizard/update_mail_alias.py
new file mode 100644
index 00000000000..b419050d48c
--- /dev/null
+++ b/addons/mail/wizard/update_mail_alias.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2010-Today OpenERP SA (<http://www.openerp.com>)
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>
+#
+##############################################################################
+
+from osv import orm
+from osv import fields
+
+class transient_update_maildomain(orm.TransientModel):
+
+ _name = "transient.update.maildomain"
+ _description = "Update Mail Domain"
+ _columns = {
+ 'name' : fields.text('Domain', required=True),
+ }
+ def update_domain(self, cr, uid, ids, context=None):
+ config_parameter_pool = self.pool.get("ir.config_parameter")
+ for record in self.browse(cr, uid, ids, context):
+ config_parameter_pool.set_param(cr, uid, "mail.catchall.domain", record.name, context)
+ return {'type': 'ir.actions.act_window_close'}
diff --git a/addons/mail/wizard/update_mail_alias_wizard.xml b/addons/mail/wizard/update_mail_alias_wizard.xml
new file mode 100644
index 00000000000..4580266adde
--- /dev/null
+++ b/addons/mail/wizard/update_mail_alias_wizard.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+ <data>
+ <record model="ir.ui.view" id="transient_update_maildomain_form">
+ <field name="name">transient.update.maildomain.form</field>
+ <field name="model">transient.update.maildomain</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml" >
+ <form string="Configure Mail Domain" version="7.0">
+ <header>
+ <button name="update_domain" string="Update"
+ type="object" class="oe_highlight"/>
+ or
+ <button special="cancel" string="Cancel" class="oe_link"/>
+ </header>
+ <group colspan="4">
+ <separator string="Email Domain" colspan="4"/>
+ <field name="name" nolabel="1" colspan="4" placeholder="openerp.my.openerp.com"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_transient_update_maildomain_form" model="ir.actions.act_window">
+ <field name="name">Configure Mail Domain</field>
+ <field name="res_model">transient.update.maildomain</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="target">new</field>
+ </record>
+
+ <!-- View for general setting -->>
+
+ <record id="view_general_configuration_mail_domain" model="ir.ui.view">
+ <field name="name">General Settings</field>
+ <field name="model">base.config.settings</field>
+ <field name="inherit_id" ref="base_setup.view_general_configuration"/>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <xpath expr="/form/sheet/group[@string='Others']" position='inside'>
+ <group colspan="4" col="4">
+ <label string="Configure Mail Domain" for="id"/>
+ <button type="action" name="%(action_transient_update_maildomain_form)d" string="Configure" icon="gtk-execute"/>
+ </group>
+ </xpath>
+ </field>
+ </record>
+
+ </data>
+</openerp>