summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Torres <adt@odoo.com>2018-02-23 10:28:10 +0100
committerGitHub <noreply@github.com>2018-02-23 10:28:10 +0100
commitff7efbb1e81cd6987601c03f0b75a37d2df8e331 (patch)
treebe9966ec4236fec8900cebafdc6f4e208f200c65
parentad1cceb4fbd2f054af647833bd34e4e06012bb6c (diff)
[FIX] website,sale,auth_signup: prevent shared field deletion
The field `auth_signup_uninvited` is defined in the 3 aforementioned modules, yet they are independant modules in respects to one another. This means that whichever module is installed first will create an XMLID for the field, if this module is uninstalled before the other two: boom! crash when changing general settings because the res.config.settings field set by the other two modules no longer exists. To solve this, we simply ignore the field during ir_model_field.unlink() Fixes #23171
-rw-r--r--addons/auth_signup/models/__init__.py1
-rw-r--r--addons/auth_signup/models/ir_model_fields.py19
-rw-r--r--addons/sale/models/__init__.py1
-rw-r--r--addons/sale/models/ir_model_fields.py19
-rw-r--r--addons/website/models/ir_model_fields.py11
5 files changed, 45 insertions, 6 deletions
diff --git a/addons/auth_signup/models/__init__.py b/addons/auth_signup/models/__init__.py
index 44dc1ee6b11..a25160266e7 100644
--- a/addons/auth_signup/models/__init__.py
+++ b/addons/auth_signup/models/__init__.py
@@ -4,3 +4,4 @@ from . import res_config_settings
from . import ir_http
from . import res_partner
from . import res_users
+from . import ir_model_fields
diff --git a/addons/auth_signup/models/ir_model_fields.py b/addons/auth_signup/models/ir_model_fields.py
new file mode 100644
index 00000000000..828b9de8346
--- /dev/null
+++ b/addons/auth_signup/models/ir_model_fields.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details
+
+from odoo import models
+
+
+# This is a nasty hack, targeted for V11 only
+class IrModelFields(models.Model):
+ _inherit = 'ir.model.fields'
+
+ def unlink(self):
+ # Prevent the deletion of some `shared` fields... -_-
+ self = self.filtered(
+ lambda rec: not (
+ rec.model == 'res.config.settings'
+ and rec.name == 'auth_signup_uninvited'
+ )
+ )
+ return super(IrModelFields, self).unlink()
diff --git a/addons/sale/models/__init__.py b/addons/sale/models/__init__.py
index 5f6e7ba2857..7a157566790 100644
--- a/addons/sale/models/__init__.py
+++ b/addons/sale/models/__init__.py
@@ -12,3 +12,4 @@ from . import sale
from . import res_config_settings
from . import sale_layout
from . import sales_team
+from . import ir_model_fields
diff --git a/addons/sale/models/ir_model_fields.py b/addons/sale/models/ir_model_fields.py
new file mode 100644
index 00000000000..828b9de8346
--- /dev/null
+++ b/addons/sale/models/ir_model_fields.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details
+
+from odoo import models
+
+
+# This is a nasty hack, targeted for V11 only
+class IrModelFields(models.Model):
+ _inherit = 'ir.model.fields'
+
+ def unlink(self):
+ # Prevent the deletion of some `shared` fields... -_-
+ self = self.filtered(
+ lambda rec: not (
+ rec.model == 'res.config.settings'
+ and rec.name == 'auth_signup_uninvited'
+ )
+ )
+ return super(IrModelFields, self).unlink()
diff --git a/addons/website/models/ir_model_fields.py b/addons/website/models/ir_model_fields.py
index 1e963bf650e..51f5c2a7dc5 100644
--- a/addons/website/models/ir_model_fields.py
+++ b/addons/website/models/ir_model_fields.py
@@ -1,17 +1,15 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details
-from odoo import api, models
+from odoo import models
# This is a nasty hack, targeted for V11 only
class IrModelFields(models.Model):
_inherit = 'ir.model.fields'
- @api.multi
def unlink(self):
- # Prevent the deletion of social_* fields defined in res.company if
- # the other module is installed
+ # Prevent the deletion of some `shared` fields... -_-
social = (
'social_facebook',
'social_github',
@@ -23,8 +21,9 @@ class IrModelFields(models.Model):
self = self.filtered(
lambda rec: not (
- rec.model == 'res.company' and
- rec.name in social
+ (rec.model == 'res.company' and rec.name in social)
+ or (rec.model == 'res.config.settings'
+ and rec.name == 'auth_signup_uninvited')
)
)
return super(IrModelFields, self).unlink()