diff --git a/addons/mail/__init__.py b/addons/mail/__init__.py index f06b4536040..1b2b5cb8755 100644 --- a/addons/mail/__init__.py +++ b/addons/mail/__init__.py @@ -28,6 +28,7 @@ import res_users import res_partner import report import wizard +import res_config # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mail/__openerp__.py b/addons/mail/__openerp__.py index 5c0afc27ec1..d4d93ab5eb6 100644 --- a/addons/mail/__openerp__.py +++ b/addons/mail/__openerp__.py @@ -56,7 +56,7 @@ The main features are: 'depends': ['base', 'base_tools'], 'data': [ 'wizard/mail_compose_message_view.xml', - 'wizard/update_mail_alias_wizard.xml', + 'res_config_view.xml', 'mail_message_view.xml', 'mail_alias_data.xml', 'mail_subscription_view.xml', @@ -70,11 +70,10 @@ The main features are: 'res_users_view.xml', 'mail_alias_view.xml', ], - 'demo_xml': [ - 'user_mail_alias_demo.xml', + 'demo': [ + 'mail_demo.xml', ], 'installable': True, - 'auto_install': False, 'certificate': '001056784984222247309', 'images': [ 'images/customer_history.jpeg', @@ -97,8 +96,5 @@ The main features are: 'qweb': [ 'static/src/xml/mail.xml', ], - 'demo': [ - 'mail_demo.xml', - ], } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index 292b2f742cd..c4328fa49d7 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -39,6 +39,14 @@ class mail_alias(osv.Model): _description = "Mail Alias" _rec_name = 'alias_name' + def _get_alias_domain(self, cr, uid, ids, name, args, context=None): + res = {} + config_parameter_pool = self.pool.get("ir.config_parameter") + domain = config_parameter_pool.get_param(cr, uid, "mail.catchall.domain", context=context) + for alias in self.browse(cr, uid, ids, context=context): + res[alias.id] = domain or "" + return res + _columns = { 'alias_name': fields.char('Mailbox Alias', size=255, required=True, help="The name of the mailbox alias, e.g. 'jobs' " @@ -63,7 +71,8 @@ class mail_alias(osv.Model): 'alias_force_thread_id': fields.integer('Record Thread ID', help="Optional ID of the thread (record) to which all " "messages will be attached, even if they did not reply to it. " - "If set, this will disable the creation of new records completely.") + "If set, this will disable the creation of new records completely."), + 'alias_domain': fields.function(_get_alias_domain, string="Alias Doamin", type='char', size=None), } _defaults = { 'alias_defaults': '{}', @@ -82,9 +91,9 @@ class mail_alias(osv.Model): for record in self.browse(cr, uid, ids, context=context): try: dict(eval(record.alias_defaults)) - return True except: return False + return True _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']), @@ -96,25 +105,27 @@ class mail_alias(osv.Model): 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) + for record in self.read(cr, uid, ids, ['alias_name', 'alias_domain'], context=context): + domain_alias = "%s@%s"%(record['alias_name'], record['alias_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 + def _generate_alias(self, cr, uid, name, sequence=1 ,context=None): + new_name = "%s%s"%(name, sequence) + search_alias = self.search(cr, uid, [('alias_name', '=', new_name)]) + if search_alias: + self._generate_alias(cr, uid, name, sequence+1 ,context=None) else: - return values.update({'alias_name': "%s"%(values['alias_name'])}) + return new_name + + def create_unique_alias(self, cr, uid, vals, context=None): + model_pool = self.pool.get('ir.model') + values = {'alias_name': vals['alias_name']} + if self.search(cr, uid, [('alias_name', '=', vals['alias_name'])]): + values.update({'alias_name': self._generate_alias(cr, uid, vals['alias_name'], sequence=1, context=context)}) + model_sids = model_pool.search(cr, uid, [('model', '=', vals['alias_model_id'])]) + values.update({'alias_model_id': model_sids[0]}) + return self.create(cr, uid, values, context=context) + diff --git a/addons/mail/mail_alias_view.xml b/addons/mail/mail_alias_view.xml index e72143bdb9a..adbc8f0033c 100644 --- a/addons/mail/mail_alias_view.xml +++ b/addons/mail/mail_alias_view.xml @@ -11,12 +11,15 @@
+
diff --git a/addons/mail/mail_demo.xml b/addons/mail/mail_demo.xml index 1adec42a910..42e37161f9a 100644 --- a/addons/mail/mail_demo.xml +++ b/addons/mail/mail_demo.xml @@ -92,4 +92,19 @@ Check the file in attachment for more information ! (third comment)]]>
+ + + + demo + + + + {} + + + + + + + diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index 3e34a71f33d..5b01968ed5e 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -154,13 +154,11 @@ class mail_group(osv.osv): 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) + if not vals.get('alias_id'): + alias_id = alias_pool.create_unique_alias(cr, uid, {'alias_name': "mail_group."+vals['name'], 'alias_model_id': self._name}, context=context) + vals.update({'alias_id': alias_id}) + res = super(mail_group, self).create(cr, uid, vals, context) + alias_pool.write(cr, uid, [vals['alias_id']], {"alias_force_thread_id": res}, context) return res + diff --git a/addons/mail/wizard/update_mail_alias.py b/addons/mail/res_config.py similarity index 52% rename from addons/mail/wizard/update_mail_alias.py rename to addons/mail/res_config.py index b419050d48c..55efb2d80ac 100644 --- a/addons/mail/wizard/update_mail_alias.py +++ b/addons/mail/res_config.py @@ -19,18 +19,21 @@ # ############################################################################## -from osv import orm -from osv import fields +from openerp.osv import osv, fields + +class project_configuration(osv.TransientModel): + _inherit = 'base.config.settings' -class transient_update_maildomain(orm.TransientModel): - - _name = "transient.update.maildomain" - _description = "Update Mail Domain" _columns = { - 'name' : fields.text('Domain', required=True), + 'alias_domain' : fields.char('Catch-all Mail Alias Domain', size=None, + help="If you have setup a catch-all mail domain redirected to " + "the OpenERP server, enter the domain name here."), } - 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'} + + def get_default_alias_domain(self, cr, uid, ids, context=None): + return {'alias_domain': self.pool.get("ir.config_parameter").get_param(cr, uid, "mail.catchall.domain", context=context)} + + def set_alias_domain(self, cr, uid, ids, context=None): + config_parameters = self.pool.get("ir.config_parameter") + for record in self.browse(cr, uid, ids, context=context): + config_parameters.set_param(cr, uid, "mail.catchall.domain", record.alias_domain or '', context=context) \ No newline at end of file diff --git a/addons/mail/res_config_view.xml b/addons/mail/res_config_view.xml new file mode 100644 index 00000000000..3b1536aad83 --- /dev/null +++ b/addons/mail/res_config_view.xml @@ -0,0 +1,16 @@ + + + + + base.config.settings.mail.alias + base.config.settings + + form + + + + + + + + diff --git a/addons/mail/res_users.py b/addons/mail/res_users.py index ea0c3a05005..8b4b05c50dd 100644 --- a/addons/mail/res_users.py +++ b/addons/mail/res_users.py @@ -74,14 +74,12 @@ class res_users(osv.osv): 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}) + alias_id = alias_pool.create_unique_alias(cr, uid, {'alias_name': data['name'], 'alias_model_id': self._name}, context=context) + data.update({'alias_id': alias_id}) user_id = super(res_users, self).create(cr, uid, data, context=context) + alias_pool.write(cr, uid, [alias_id], {"alias_force_thread_id": user_id}, context) 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 diff --git a/addons/mail/user_mail_alias_demo.xml b/addons/mail/user_mail_alias_demo.xml deleted file mode 100644 index eea7d521776..00000000000 --- a/addons/mail/user_mail_alias_demo.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - demo - - - - {} - - - - - - - - diff --git a/addons/mail/wizard/__init__.py b/addons/mail/wizard/__init__.py index bf35381fc94..88b9581f68e 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_wizard.xml b/addons/mail/wizard/update_mail_alias_wizard.xml deleted file mode 100644 index 4580266adde..00000000000 --- a/addons/mail/wizard/update_mail_alias_wizard.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - transient.update.maildomain.form - transient.update.maildomain - form - -
-
-
- - - - -
-
-
- - - Configure Mail Domain - transient.update.maildomain - form - form - new - - - > - - - General Settings - base.config.settings - - form - - - -