[REF] ir_config_parameter: remove group_ids and simplify

Add `sudo()` to call `get_param` where necessary, and make the web client use a
controller instead of directly accessing parameters.
This commit is contained in:
Raphael Collet
2017-01-03 16:52:49 +01:00
parent 7543afb070
commit d0ca2d115e
54 changed files with 127 additions and 161 deletions
+3 -3
View File
@@ -70,10 +70,10 @@ class AuthSignupHome(Home):
def get_auth_signup_config(self):
"""retrieve the module config (which features are enabled) for the login page"""
IrConfigParam = request.env['ir.config_parameter'].sudo()
get_param = request.env['ir.config_parameter'].sudo().get_param
return {
'signup_enabled': IrConfigParam.get_param('auth_signup.allow_uninvited') == 'True',
'reset_password_enabled': IrConfigParam.get_param('auth_signup.reset_password') == 'True',
'signup_enabled': get_param('auth_signup.allow_uninvited') == 'True',
'reset_password_enabled': get_param('auth_signup.reset_password') == 'True',
}
def get_auth_signup_qcontext(self):
@@ -14,7 +14,6 @@
<record id="default_template_user_config" model="ir.config_parameter">
<field name="key">auth_signup.template_user_id</field>
<field name="value" ref="default_template_user"/>
<field name="group_ids" eval="[(4, ref('base.group_system'))]"/>
</record>
<!-- Email template for reset password -->
+8 -8
View File
@@ -13,19 +13,19 @@ class BaseConfigSettings(models.TransientModel):
@api.model
def get_default_auth_signup_template_user_id(self, fields):
IrConfigParam = self.env['ir.config_parameter']
get_param = self.env['ir.config_parameter'].get_param
# we use safe_eval on the result, since the value of the parameter is a nonempty string
return {
'auth_signup_reset_password': safe_eval(IrConfigParam.get_param('auth_signup.reset_password', 'False')),
'auth_signup_uninvited': safe_eval(IrConfigParam.get_param('auth_signup.allow_uninvited', 'False')),
'auth_signup_template_user_id': safe_eval(IrConfigParam.get_param('auth_signup.template_user_id', 'False')),
'auth_signup_reset_password': safe_eval(get_param('auth_signup.reset_password', 'False')),
'auth_signup_uninvited': safe_eval(get_param('auth_signup.allow_uninvited', 'False')),
'auth_signup_template_user_id': safe_eval(get_param('auth_signup.template_user_id', 'False')),
}
@api.multi
def set_auth_signup_template_user_id(self):
self.ensure_one()
IrConfigParam = self.env['ir.config_parameter']
set_param = self.env['ir.config_parameter'].set_param
# we store the repr of the values, since the value of the parameter is a required string
IrConfigParam.set_param('auth_signup.reset_password', repr(self.auth_signup_reset_password), groups=['base.group_system'])
IrConfigParam.set_param('auth_signup.allow_uninvited', repr(self.auth_signup_uninvited), groups=['base.group_system'])
IrConfigParam.set_param('auth_signup.template_user_id', repr(self.auth_signup_template_user_id.id), groups=['base.group_system'])
set_param('auth_signup.reset_password', repr(self.auth_signup_reset_password))
set_param('auth_signup.allow_uninvited', repr(self.auth_signup_uninvited))
set_param('auth_signup.template_user_id', repr(self.auth_signup_template_user_id.id))
+1 -1
View File
@@ -52,7 +52,7 @@ class ResPartner(models.Model):
the url state components (menu_id, id, view_type) """
res = dict.fromkeys(self.ids, False)
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for partner in self:
# when required, make sure the partner has a valid signup token
if self.env.context.get('signup_valid') and not partner.user_ids:
+3 -4
View File
@@ -75,15 +75,14 @@ class ResUsers(models.Model):
@api.model
def _signup_create_user(self, values):
""" create a new user from the template user """
# we expect self.uid == SUPERUSER_ID
IrConfigParam = self.env['ir.config_parameter']
template_user_id = literal_eval(IrConfigParam.get_param('auth_signup.template_user_id', 'False'))
get_param = self.env['ir.config_parameter'].sudo().get_param
template_user_id = literal_eval(get_param('auth_signup.template_user_id', 'False'))
template_user = self.browse(template_user_id)
assert template_user.exists(), 'Signup: invalid template user'
# check that uninvited users may sign up
if 'partner_id' not in values:
if not literal_eval(IrConfigParam.get_param('auth_signup.allow_uninvited', 'False')):
if not literal_eval(get_param('auth_signup.allow_uninvited', 'False')):
raise SignupError('Signup is not allowed for uninvited users')
assert values.get('login'), "Signup: no login given for new user"
@@ -47,8 +47,8 @@ class BaseGengoTranslations(models.TransientModel):
@api.model_cr
def init(self):
icp = self.env['ir.config_parameter'].sudo()
if not icp.get_param(self.GENGO_KEY, default=None):
icp.set_param(self.GENGO_KEY, str(uuid.uuid4()), groups=self.GROUPS)
if not icp.get_param(self.GENGO_KEY):
icp.set_param(self.GENGO_KEY, str(uuid.uuid4()))
@api.model_cr
def get_gengo_key(self):
@@ -206,7 +206,7 @@ class BaseGengoTranslations(models.TransientModel):
'term2.id': {...}
}
}'''
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
IrTranslation = self.env['ir.translation']
jobs = {}
user = self.env.user
+2 -2
View File
@@ -131,7 +131,7 @@ class Attendee(models.Model):
"""
res = False
if self.env['ir.config_parameter'].get_param('calendar.block_mail') or self._context.get("no_mail_to_attendees"):
if self.env['ir.config_parameter'].sudo().get_param('calendar.block_mail') or self._context.get("no_mail_to_attendees"):
return res
calendar_view = self.env.ref('calendar.view_calendar_event_calendar')
@@ -152,7 +152,7 @@ class Attendee(models.Model):
'color': colors,
'action_id': self.env['ir.actions.act_window'].search([('view_id', '=', calendar_view.id)], limit=1).id,
'dbname': self._cr.dbname,
'base_url': self.env['ir.config_parameter'].get_param('web.base.url', default='http://localhost:8069')
'base_url': self.env['ir.config_parameter'].sudo().get_param('web.base.url', default='http://localhost:8069')
})
invitation_template = invitation_template.with_context(rendering_context)
@@ -4,7 +4,6 @@
<record id="config_google_redirect_uri" model="ir.config_parameter">
<field name="key">google_redirect_uri</field>
<field name="value">urn:ietf:wg:oauth:2.0:oob</field>
<field name="group_ids" eval="[(4, ref('base.group_system'))]"/>
</record>
</data>
</odoo>
+13 -13
View File
@@ -57,11 +57,11 @@ class GoogleService(models.TransientModel):
@api.model
def _get_google_token_uri(self, service, scope):
Parameters = self.env['ir.config_parameter'].sudo()
get_param = self.env['ir.config_parameter'].sudo().get_param
encoded_params = werkzeug.url_encode({
'scope': scope,
'redirect_uri': Parameters.get_param('google_redirect_uri'),
'client_id': Parameters.get_param('google_%s_client_id' % service),
'redirect_uri': get_param('google_redirect_uri'),
'client_id': get_param('google_%s_client_id' % service),
'response_type': 'code',
})
return '%s?%s' % (GOOGLE_AUTH_ENDPOINT, encoded_params)
@@ -77,9 +77,9 @@ class GoogleService(models.TransientModel):
'f': from_url
}
Parameters = self.env['ir.config_parameter']
base_url = Parameters.get_param('web.base.url', default='http://www.odoo.com?NoBaseUrl')
client_id = Parameters.sudo().get_param('google_%s_client_id' % (service,), default=False)
get_param = self.env['ir.config_parameter'].sudo().get_param
base_url = get_param('web.base.url', default='http://www.odoo.com?NoBaseUrl')
client_id = get_param('google_%s_client_id' % (service,), default=False)
encoded_params = werkzeug.url_encode({
'response_type': 'code',
@@ -97,10 +97,10 @@ class GoogleService(models.TransientModel):
""" Call Google API to exchange authorization code against token, with POST request, to
not be redirected.
"""
Parameters = self.env['ir.config_parameter']
base_url = Parameters.get_param('web.base.url', default='http://www.odoo.com?NoBaseUrl')
client_id = Parameters.sudo().get_param('google_%s_client_id' % (service,), default=False)
client_secret = Parameters.sudo().get_param('google_%s_client_secret' % (service,), default=False)
get_param = self.env['ir.config_parameter'].sudo().get_param
base_url = get_param('web.base.url', default='http://www.odoo.com?NoBaseUrl')
client_id = get_param('google_%s_client_id' % (service,), default=False)
client_secret = get_param('google_%s_client_secret' % (service,), default=False)
headers = {"content-type": "application/x-www-form-urlencoded"}
data = werkzeug.url_encode({
@@ -120,9 +120,9 @@ class GoogleService(models.TransientModel):
# FIXME : this method update a field defined in google_calendar module. Since it is used only in that module, maybe it should be moved.
@api.model
def _refresh_google_token_json(self, refresh_token, service): # exchange_AUTHORIZATION vs Token (service = calendar)
Parameters = self.env['ir.config_parameter'].sudo()
client_id = Parameters.get_param('google_%s_client_id' % (service,), default=False)
client_secret = Parameters.get_param('google_%s_client_secret' % (service,), default=False)
get_param = self.env['ir.config_parameter'].sudo().get_param
client_id = get_param('google_%s_client_id' % (service,), default=False)
client_secret = get_param('google_%s_client_secret' % (service,), default=False)
headers = {"content-type": "application/x-www-form-urlencoded"}
data = werkzeug.url_encode({
@@ -906,14 +906,14 @@ class GoogleCalendar(models.AbstractModel):
self.env.user.sudo().write(vals)
def get_minTime(self):
number_of_week = self.env['ir.config_parameter'].get_param('calendar.week_synchro', default=13)
number_of_week = self.env['ir.config_parameter'].sudo().get_param('calendar.week_synchro', default=13)
return datetime.now() - timedelta(weeks=number_of_week)
def get_need_synchro_attendee(self):
return self.env['ir.config_parameter'].get_param('calendar.block_synchro_attendee', default=True)
return self.env['ir.config_parameter'].sudo().get_param('calendar.block_synchro_attendee', default=True)
def get_disable_since_synchro(self):
return self.env['ir.config_parameter'].get_param('calendar.block_since_synchro', default=False)
return self.env['ir.config_parameter'].sudo().get_param('calendar.block_since_synchro', default=False)
def get_print_log(self):
return self.env['ir.config_parameter'].get_param('calendar.debug_print', default=False)
return self.env['ir.config_parameter'].sudo().get_param('calendar.debug_print', default=False)
+7 -5
View File
@@ -14,11 +14,13 @@ class CalendarSettings(models.TransientModel):
server_uri = fields.Char('URI for tuto')
def set_calset(self):
self.env['ir.config_parameter'].set_param('google_calendar_client_id', (self.cal_client_id or '').strip(), groups=['base.group_system'])
self.env['ir.config_parameter'].set_param('google_calendar_client_secret', (self.cal_client_secret or '').strip(), groups=['base.group_system'])
set_param = self.env['ir.config_parameter'].set_param
set_param('google_calendar_client_id', (self.cal_client_id or '').strip())
set_param('google_calendar_client_secret', (self.cal_client_secret or '').strip())
def get_default_all(self, fields):
cal_client_id = self.env['ir.config_parameter'].get_param('google_calendar_client_id', default='')
cal_client_secret = self.env['ir.config_parameter'].get_param('google_calendar_client_secret', default='')
server_uri = "%s/google_account/authentication" % self.env['ir.config_parameter'].get_param('web.base.url', default="http://yourcompany.odoo.com")
get_param = self.env['ir.config_parameter'].get_param
cal_client_id = get_param('google_calendar_client_id', default='')
cal_client_secret = get_param('google_calendar_client_secret', default='')
server_uri = "%s/google_account/authentication" % get_param('web.base.url', default="http://yourcompany.odoo.com")
return dict(cal_client_id=cal_client_id, cal_client_secret=cal_client_secret, server_uri=server_uri)
@@ -5,13 +5,11 @@
<record id="config_google_drive_client_id" model="ir.config_parameter">
<field name="key">google_drive_client_id</field>
<field name="value">598905559630.apps.googleusercontent.com</field>
<field name="group_ids" eval="[(4, ref('base.group_system'))]" />
</record>
<record id="config_google_drive_client_secret" model="ir.config_parameter">
<field name="key">google_drive_client_secret</field>
<field name="value">vTmou73c-njP-1qCxm7qx7QE</field>
<field name="group_ids" eval="[(4, ref('base.group_system'))]" />
</record>
</data>
+4 -4
View File
@@ -49,8 +49,8 @@ class GoogleDrive(models.Model):
@api.model
def get_access_token(self, scope=None):
Config = self.env['ir.config_parameter']
google_drive_refresh_token = Config.sudo().get_param('google_drive_refresh_token')
Config = self.env['ir.config_parameter'].sudo()
google_drive_refresh_token = Config.get_param('google_drive_refresh_token')
user_is_admin = self.env['res.users'].browse(self.env.user.id)._is_admin()
if not google_drive_refresh_token:
if user_is_admin:
@@ -59,8 +59,8 @@ class GoogleDrive(models.Model):
raise RedirectWarning(msg, action_id, _('Go to the configuration panel'))
else:
raise UserError(_("Google Drive is not yet configured. Please contact your administrator."))
google_drive_client_id = Config.sudo().get_param('google_drive_client_id')
google_drive_client_secret = Config.sudo().get_param('google_drive_client_secret')
google_drive_client_id = Config.get_param('google_drive_client_id')
google_drive_client_secret = Config.get_param('google_drive_client_secret')
#For Getting New Access Token With help of old Refresh Token
data = werkzeug.url_encode({
'client_id': google_drive_client_id,
+2 -2
View File
@@ -29,5 +29,5 @@ class BaseConfigSettings(models.TransientModel):
if authorization_code and authorization_code != ICP.get_param('google_drive_authorization_code'):
refresh_token = self.env['google.service'].generate_refresh_token('drive', authorization_code)
ICP.set_param('google_drive_authorization_code', authorization_code, groups=['base.group_system'])
ICP.set_param('google_drive_refresh_token', refresh_token, groups=['base.group_system'])
ICP.set_param('google_drive_authorization_code', authorization_code)
ICP.set_param('google_drive_refresh_token', refresh_token)
@@ -40,7 +40,7 @@ class GoogleDrive(models.Model):
formula = '=oe_read_group("%s";"%s";"%s";"%s")' % (model, fields, groupbys, domain)
else:
formula = '=oe_browse("%s";"%s";"%s")' % (model, fields, domain)
url = self.env['ir.config_parameter'].get_param('web.base.url')
url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
dbname = self._cr.dbname
user = self.env['res.users'].browse(self.env.user.id).read(['login', 'password'])[0]
username = user['login']
@@ -70,7 +70,7 @@ class ImLivechatChannel(models.Model):
def _compute_script_external(self):
view = self.env['ir.model.data'].get_object('im_livechat', 'external_loader')
values = {
"url": self.env['ir.config_parameter'].get_param('web.base.url'),
"url": self.env['ir.config_parameter'].sudo().get_param('web.base.url'),
"dbname": self._cr.dbname,
}
for record in self:
@@ -79,7 +79,7 @@ class ImLivechatChannel(models.Model):
@api.multi
def _compute_web_page_link(self):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for record in self:
record.web_page = "%s/im_livechat/support/%i" % (base_url, record.id)
@@ -195,7 +195,7 @@ class ImLivechatChannel(models.Model):
def get_livechat_info(self, channel_id, username='Visitor'):
info = {}
info['available'] = len(self.browse(channel_id).get_available_users()) > 0
info['server_url'] = self.env['ir.config_parameter'].get_param('web.base.url')
info['server_url'] = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
if info['available']:
info['options'] = self.sudo().get_channel_infos(channel_id)
info['options']["default_username"] = username
+3 -3
View File
@@ -51,7 +51,7 @@ class link_tracker(models.Model):
def convert_links(self, html, vals, blacklist=None):
for match in re.findall(URL_REGEX, html):
short_schema = self.env['ir.config_parameter'].get_param('web.base.url') + '/r/'
short_schema = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + '/r/'
href = match[0]
long_url = match[1]
@@ -76,12 +76,12 @@ class link_tracker(models.Model):
@api.one
@api.depends('code')
def _compute_short_url(self):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
self.short_url = urljoin(base_url, '/r/%(code)s' % {'code': self.code})
@api.one
def _compute_short_url_host(self):
self.short_url_host = self.env['ir.config_parameter'].get_param('web.base.url') + '/r/'
self.short_url_host = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + '/r/'
@api.one
def _compute_code(self):
-2
View File
@@ -37,14 +37,12 @@
<record id="icp_mail_catchall_alias" model="ir.config_parameter">
<field name="key">mail.catchall.alias</field>
<field name="value">catchall</field>
<field name="group_ids" eval="[(4, ref('base.group_system'))]"/>
</record>
<!-- Bounce Email Alias -->
<record id="icp_mail_bounce_alias" model="ir.config_parameter">
<field name="key">mail.bounce.alias</field>
<field name="value">bounce</field>
<field name="group_ids" eval="[(4, ref('base.group_system'))]"/>
</record>
<!-- Discussion subtype for messaging / Chatter -->
+1 -1
View File
@@ -285,7 +285,7 @@ class MailTemplate(models.Model):
html = '<div>%s</div>' % html
root = lxml.html.fromstring(html)
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
(base_scheme, base_netloc, bpath, bparams, bquery, bfragment) = urlparse.urlparse(base_url)
def _process_link(url):
+1 -1
View File
@@ -787,7 +787,7 @@ class MailThread(models.AbstractModel):
""" Get specific notification email values to store on the notification
mail_mail. Void method, inherit it to add custom values. """
self.ensure_one()
database_uuid = self.env['ir.config_parameter'].get_param('database.uuid')
database_uuid = self.env['ir.config_parameter'].sudo().get_param('database.uuid')
return {'headers': repr({
'X-Odoo-Objects': "%s-%s" % (self._name, self.id),
'X-Odoo-db-uuid': database_uuid
+1 -1
View File
@@ -37,4 +37,4 @@ class BaseConfiguration(models.TransientModel):
@api.multi
def set_alias_domain(self):
for record in self:
self.env['ir.config_parameter'].set_param("mail.catchall.domain", record.alias_domain or '', groups=['base.group_system'])
self.env['ir.config_parameter'].set_param("mail.catchall.domain", record.alias_domain or '')
+4 -4
View File
@@ -113,10 +113,10 @@ class PublisherWarrantyContract(AbstractModel):
pass
if result.get('enterprise_info'):
# Update expiration date
IrParamSudo = self.env['ir.config_parameter'].sudo()
IrParamSudo.set_param('database.expiration_date', result['enterprise_info'].get('expiration_date'), ['base.group_user'])
IrParamSudo.set_param('database.expiration_reason', result['enterprise_info'].get('expiration_reason', 'trial'), ['base.group_system'])
IrParamSudo.set_param('database.enterprise_code', result['enterprise_info'].get('enterprise_code'), ['base.group_user'])
set_param = self.env['ir.config_parameter'].sudo().set_param
set_param('database.expiration_date', result['enterprise_info'].get('expiration_date'))
set_param('database.expiration_reason', result['enterprise_info'].get('expiration_reason', 'trial'))
set_param('database.enterprise_code', result['enterprise_info'].get('enterprise_code'))
except Exception:
if cron_mode:
+4 -4
View File
@@ -29,7 +29,7 @@ class MailMail(models.Model):
return mail
def _get_tracking_url(self, partner=None):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
track_url = urlparse.urljoin(
base_url, 'mail/track/%(mail_id)s/blank.gif?%(params)s' % {
'mail_id': self.id,
@@ -39,7 +39,7 @@ class MailMail(models.Model):
return '<img src="%s" alt=""/>' % track_url
def _get_unsubscribe_url(self, email_to):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
url = urlparse.urljoin(
base_url, 'mail/mailing/%(mailing_id)s/unsubscribe?%(params)s' % {
'mailing_id': self.mailing_id.id,
@@ -75,7 +75,7 @@ class MailMail(models.Model):
body = body.replace(href, new_href)
# prepend <base> tag for images using absolute urls
domain = self.env["ir.config_parameter"].get_param("web.base.url")
domain = self.env["ir.config_parameter"].sudo().get_param("web.base.url")
base = "<base href='%s'>" % domain
body = tools.append_content_to_html(base, body, plaintext=False, container_tag='div')
# resolve relative image url to absolute for outlook.com
@@ -95,7 +95,7 @@ class MailMail(models.Model):
def send_get_email_dict(self, partner=None):
# TDE: temporary addition (mail was parameter) due to semi-new-API
res = super(MailMail, self).send_get_email_dict(partner)
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
if self.mailing_id and res.get('body') and res.get('email_to'):
emails = tools.email_split(res.get('email_to')[0])
email_to = emails and emails[0] or False
+1 -1
View File
@@ -109,7 +109,7 @@ class AcquirerAdyen(models.Model):
@api.multi
def adyen_form_generate_values(self, values):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
# tmp
import datetime
from dateutil import relativedelta
+1 -1
View File
@@ -24,7 +24,7 @@ class AuthorizeController(http.Controller):
if post:
request.env['payment.transaction'].sudo().form_feedback(post, 'authorize')
return_url = post.pop('return_url', '/')
base_url = request.env['ir.config_parameter'].get_param('web.base.url')
base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url')
# Authorize.Net is expecting a response to the POST sent by their server.
# This response is in the form of a URL that Authorize.Net will pass on to the
# client's browser to redirect them to the desired location need javascript.
+1 -1
View File
@@ -85,7 +85,7 @@ class AcquirerBuckaroo(models.Model):
@api.multi
def buckaroo_form_generate_values(self, values):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
buckaroo_tx_values = dict(values)
buckaroo_tx_values.update({
'Brq_websitekey': self.brq_websitekey,
+1 -1
View File
@@ -150,7 +150,7 @@ class PaymentAcquirerOgone(models.Model):
return shasign
def ogone_form_generate_values(self, values):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
ogone_tx_values = dict(values)
temp_ogone_tx_values = {
'PSPID': self.ogone_pspid,
+1 -1
View File
@@ -87,7 +87,7 @@ class AcquirerPaypal(models.Model):
@api.multi
def paypal_form_generate_values(self, values):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
paypal_tx_values = dict(values)
paypal_tx_values.update({
+1 -1
View File
@@ -54,7 +54,7 @@ class PaymentAcquirerPayumoney(models.Model):
@api.multi
def payumoney_form_generate_values(self, values):
self.ensure_one()
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
payumoney_values = dict(values,
key=self.payumoney_merchant_key,
txnid=values['reference'],
+1 -1
View File
@@ -69,7 +69,7 @@ class AcquirerSips(models.Model):
@api.multi
def sips_form_generate_values(self, values):
self.ensure_one()
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
currency = self.env['res.currency'].sudo().browse(values['currency_id'])
currency_code = CURRENCY_CODES.get(currency.name, False)
if not currency_code:
+1 -1
View File
@@ -40,6 +40,6 @@ class Rating(http.Controller):
return werkzeug.utils.redirect('/web#model=%s&id=%s&view_type=form' % (record_sudo._name, record_sudo.id))
lang = rating.partner_id.lang or 'en_US'
return request.env['ir.ui.view'].with_context(lang=lang).render_template('rating.rating_external_page_view', {
'web_base_url': request.env['ir.config_parameter'].get_param('web.base.url'),
'web_base_url': request.env['ir.config_parameter'].sudo().get_param('web.base.url'),
'rating': rating,
})
+1 -1
View File
@@ -9,5 +9,5 @@ class IrHttp(models.AbstractModel):
def session_info(self):
res = super(IrHttp, self).session_info()
res['web.base.url'] = self.env['ir.config_parameter'].get_param('web.base.url', default='')
res['web.base.url'] = self.env['ir.config_parameter'].sudo().get_param('web.base.url', default='')
return res
+1 -1
View File
@@ -115,7 +115,7 @@ class Report(models.Model):
user=user,
res_company=user.company_id,
website=website,
web_base_url=self.env['ir.config_parameter'].get_param('web.base.url', default='')
web_base_url=self.env['ir.config_parameter'].sudo().get_param('web.base.url', default='')
)
return view_obj.render_template(template, values)
+2 -1
View File
@@ -104,7 +104,8 @@ class Survey(models.Model):
def _compute_survey_url(self):
""" Computes a public URL for the survey """
base_url = '/' if self.env.context.get('relative_url') else self.env['ir.config_parameter'].get_param('web.base.url')
base_url = '/' if self.env.context.get('relative_url') else \
self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for survey in self:
survey.public_url = urljoin(base_url, "survey/start/%s" % (slug(survey)))
survey.print_url = urljoin(base_url, "survey/print/%s" % (slug(survey)))
+12
View File
@@ -18,6 +18,7 @@ import os
import re
import sys
import time
import werkzeug
import werkzeug.utils
import werkzeug.wrappers
import zlib
@@ -777,6 +778,17 @@ class Session(http.Controller):
request.session.check_security()
return None
@http.route('/web/session/account', type='json', auth="user")
def account(self):
ICP = request.env['ir.config_parameter'].sudo()
params = {
'response_type': 'token',
'client_id': ICP.get_param('database.uuid') or '',
'state': json.dumps({'d': request.db, 'u': ICP.get_param('web.base.url')}),
'scope': 'userinfo',
}
return 'https://accounts.odoo.com/oauth2/auth?' + werkzeug.url_encode(params)
@http.route('/web/session/destroy', type='json', auth="user")
def destroy(self):
request.session.logout()
+3 -13
View File
@@ -58,21 +58,11 @@ var UserMenu = Widget.extend({
});
},
on_menu_account: function() {
var self = this;
this.trigger_up('clear_uncommitted_changes', {
callback: function() {
var P = new Model('ir.config_parameter');
P.call('get_param', ['database.uuid']).then(function(dbuuid) {
var state = {
'd': session.db,
'u': window.location.protocol + '//' + window.location.host,
};
var params = {
response_type: 'token',
client_id: dbuuid || '',
state: JSON.stringify(state),
scope: 'userinfo',
};
framework.redirect('https://accounts.odoo.com/oauth2/auth?'+$.param(params));
self.rpc('/web/session/account').then(function(url) {
framework.redirect(url);
}).fail(function(result, ev){
ev.preventDefault();
framework.redirect('https://accounts.odoo.com/account');
+1 -1
View File
@@ -28,7 +28,7 @@ class ServerAction(models.Model):
action.xml_id = res.get(action.id)
def _compute_website_url(self, website_path, xml_id):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
link = website_path or xml_id or (self.id and '%d' % self.id) or ''
if base_url and link:
path = '%s/%s' % ('/website/action', link)
+1 -2
View File
@@ -59,8 +59,7 @@ class WebsiteConfigSettings(models.TransientModel):
return dict(google_maps_api_key=google_maps_api_key)
def set_google_maps_api_key(self):
self.env['ir.config_parameter'].set_param(
'google_maps_api_key', (self.google_maps_api_key or '').strip(), groups=['base.group_system'])
self.env['ir.config_parameter'].set_param('google_maps_api_key', (self.google_maps_api_key or '').strip())
@api.depends('language_ids')
def _compute_language_count(self):
+1 -1
View File
@@ -172,7 +172,7 @@ class WebsiteBlog(http.Controller):
def blog_feed(self, blog, limit='15'):
v = {}
v['blog'] = blog
v['base_url'] = request.env['ir.config_parameter'].get_param('web.base.url')
v['base_url'] = request.env['ir.config_parameter'].sudo().get_param('web.base.url')
v['posts'] = request.env['blog.post'].search([('blog_id','=', blog.id)], limit=min(int(limit), 50))
r = request.render("website_blog.blog_feed", v, headers=[('Content-Type', 'application/atom+xml')])
return r
@@ -107,14 +107,14 @@ class CrmLeadForwardToPartner(models.TransientModel):
action = type == 'opportunity' and 'action_portal_opportunities' or 'action_portal_leads'
action_ref = self.env.ref('website_crm_partner_assign.%s' % (action,), False)
portal_link = "%s/?db=%s#id=%s&action=%s&view_type=form" % (
self.env['ir.config_parameter'].get_param('web.base.url'),
self.env['ir.config_parameter'].sudo().get_param('web.base.url'),
self.env.cr.dbname,
lead_id,
action_ref and action_ref.id or False)
return portal_link
def get_portal_url(self):
portal_link = "%s/?db=%s" % (self.env['ir.config_parameter'].get_param('web.base.url'), self.env.cr.dbname)
portal_link = "%s/?db=%s" % (self.env['ir.config_parameter'].sudo().get_param('web.base.url'), self.env.cr.dbname)
return portal_link
forward_type = fields.Selection([
+1 -1
View File
@@ -13,7 +13,7 @@
</record>
</data>
<data>
<function model="ir.config_parameter" name="set_param" eval="('auth_signup.allow_uninvited', True, ['base.group_system'])" />
<function model="ir.config_parameter" name="set_param" eval="('auth_signup.allow_uninvited', True)"/>
<!-- JUMP TO FORUM AT INSTALL -->
<record id="action_open_forum" model="ir.actions.act_url">
+1 -1
View File
@@ -33,7 +33,7 @@ class Forum(models.Model):
TDE TODO: move me somewhere else, auto_init ? """
forum_uuids = self.env['ir.config_parameter'].search([('key', '=', 'website_forum.uuid')])
if not forum_uuids:
forum_uuids.set_param('website_forum.uuid', str(uuid.uuid4()), ['base.group_system'])
forum_uuids.set_param('website_forum.uuid', str(uuid.uuid4()))
@api.model
def _get_default_faq(self):
+1 -1
View File
@@ -84,7 +84,7 @@ class Users(models.Model):
'email': self.email}
if forum_id:
params['forum_id'] = forum_id
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
token_url = base_url + '/forum/validate_email?%s' % urlencode(params)
activation_template.sudo().with_context(token_url=token_url).send_mail(self.id, force_send=True)
return True
@@ -17,7 +17,7 @@ class RecruitmentSource(models.Model):
@api.one
@api.depends('source_id', 'source_id.name', 'job_id')
def _compute_url(self):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for source in self:
source.url = urljoin(base_url, "%s?%s" % (source.job_id.website_url,
url_encode({
@@ -17,7 +17,7 @@ class MailGroup(models.Model):
def message_get_email_values(self, notif_mail=None):
self.ensure_one()
res = super(MailGroup, self).message_get_email_values(notif_mail=notif_mail)
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
headers = {}
if res.get('headers'):
try:
@@ -34,7 +34,7 @@ class MailGroup(models.Model):
@api.multi
def _send_confirmation_email(self, partner_ids, unsubscribe=False):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
route = "/groups/%(action)s/%(channel)s/%(partner)s/%(token)s"
if unsubscribe:
template = self.env.ref('website_mail_channel.mail_template_list_unsubscribe')
@@ -15,7 +15,7 @@ class MailMail(models.Model):
if self.model == 'mail.channel' and self.res_id:
# no super() call on purpose, no private links that could be quoted!
channel = self.env['mail.channel'].browse(self.res_id)
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
vals = {
'maillist': _('Mailing-List'),
'post_to': _('Post to'),
+1 -1
View File
@@ -333,7 +333,7 @@ class WebsiteSlides(http.Controller):
# determine if it is embedded from external web page
referrer_url = request.httprequest.headers.get('Referer', '')
base_url = request.env['ir.config_parameter'].get_param('web.base.url')
base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url')
is_embedded = referrer_url and not bool(base_url in referrer_url) or False
# try accessing slide, and display to corresponding template
try:
@@ -5,7 +5,6 @@
<record model="ir.config_parameter" id="google_app_key">
<field name="key">website_slides.google_app_key</field>
<field name="value">AIzaSyDOWlmDW-7DbLmOR9ZsT5AOEXf4n6TFwQA</field>
<field name="group_ids" eval="[(4, ref('base.group_system'))]" />
</record>
<record id="website_menu_slides" model="website.menu">
+5 -5
View File
@@ -146,7 +146,7 @@ class Channel(models.Model):
@api.depends('name')
def _compute_website_url(self):
super(Channel, self)._compute_website_url()
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for channel in self:
if channel.id: # avoid to perform a slug on a not yet saved record in case of an onchange.
channel.website_url = '%s/slides/%s' % (base_url, slug(channel))
@@ -347,7 +347,7 @@ class Slide(models.Model):
embed_code = fields.Text('Embed Code', readonly=True, compute='_get_embed_code')
def _get_embed_code(self):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for record in self:
if record.datas and (not record.document_id or record.slide_type in ['document', 'presentation']):
record.embed_code = '<iframe src="%s/slides/embed/%s?page=1" allowFullScreen="true" height="%s" width="%s" frameborder="0"></iframe>' % (base_url, record.id, 315, 420)
@@ -365,7 +365,7 @@ class Slide(models.Model):
@api.depends('name')
def _compute_website_url(self):
super(Slide, self)._compute_website_url()
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for slide in self:
if slide.id: # avoid to perform a slug on a not yet saved record in case of an onchange.
# link_tracker is not in dependencies, so use it to shorten url only if installed.
@@ -473,7 +473,7 @@ class Slide(models.Model):
yield record
def _post_publication(self):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for slide in self.filtered(lambda slide: slide.website_published and slide.channel_id.publish_template_id):
publish_template = slide.channel_id.publish_template_id
html_body = publish_template.with_context({'base_url': base_url}).render_template(publish_template.body_html, 'slide.slide', slide.id)
@@ -486,7 +486,7 @@ class Slide(models.Model):
@api.one
def send_share_email(self, email):
base_url = self.env['ir.config_parameter'].get_param('web.base.url')
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
return self.channel_id.share_template_id.with_context({'email': email, 'base_url': base_url}).send_mail(self.id)
# --------------------------------------------------
+1 -6
View File
@@ -10,11 +10,6 @@ import tests
def post_init(cr, registry):
"""Rewrite ICP's to force groups"""
from odoo import api, SUPERUSER_ID
from odoo.addons.base.ir.ir_config_parameter import _default_parameters
env = api.Environment(cr, SUPERUSER_ID, {})
ICP = env['ir.config_parameter']
for key, func in _default_parameters.iteritems():
val = ICP.get_param(key)
_, groups = func()
ICP.set_param(key, val, groups)
env['ir.config_parameter'].init(force=True)
+13 -25
View File
@@ -16,10 +16,10 @@ _logger = logging.getLogger(__name__)
A dictionary holding some configuration parameters to be initialized when the database is created.
"""
_default_parameters = {
"database.secret": lambda: (str(uuid.uuid4()), ['base.group_erp_manager']),
"database.uuid": lambda: (str(uuid.uuid1()), []),
"database.create_date": lambda: (fields.Datetime.now(), ['base.group_user']),
"web.base.url": lambda: ("http://localhost:%s" % config.get('xmlrpc_port'), []),
"database.secret": lambda: str(uuid.uuid4()),
"database.uuid": lambda: str(uuid.uuid1()),
"database.create_date": fields.Datetime.now,
"web.base.url": lambda: "http://localhost:%s" % config.get('xmlrpc_port'),
}
@@ -30,7 +30,6 @@ class IrConfigParameter(models.Model):
key = fields.Char(required=True, index=True)
value = fields.Text(required=True)
group_ids = fields.Many2many('res.groups', 'ir_config_parameter_groups_rel', 'icp_id', 'group_id', string='Groups')
_sql_constraints = [
('key_uniq', 'unique (key)', 'Key must be unique.')
@@ -47,8 +46,7 @@ class IrConfigParameter(models.Model):
# force=True skips search and always performs the 'if' body (because ids=False)
params = self.sudo().search([('key', '=', key)])
if force or not params:
value, groups = func()
params.set_param(key, value, groups=groups)
params.set_param(key, func())
@api.model
def get_param(self, key, default=False):
@@ -68,43 +66,33 @@ class IrConfigParameter(models.Model):
return params[0]['value'] if params else None
@api.model
def set_param(self, key, value, groups=()):
def set_param(self, key, value):
"""Sets the value of a parameter.
:param string key: The key of the parameter value to set.
:param string value: The value to set.
:param list of string groups: List of group (xml_id allowed) to read this key.
:return: the previous value of the parameter or False if it did
not exist.
:rtype: string
"""
self._get_param.clear_cache(self)
param = self.search([('key', '=', key)])
gids = []
for group_xml in groups:
group = self.env.ref(group_xml, raise_if_not_found=False)
if group:
gids.append((4, group.id))
else:
_logger.warning('Potential Security Issue: Group [%s] is not found.' % group_xml)
vals = {'value': value}
if gids:
vals.update(group_ids=gids)
if param:
old = param.value
if value is not False and value is not None:
param.write(vals)
param.write({'value': value})
else:
param.unlink()
return old
else:
vals.update(key=key)
if value is not False and value is not None:
self.create(vals)
self.create({'key': key, 'value': value})
return False
@api.model
def create(self, vals):
self.clear_caches()
return super(IrConfigParameter, self).create(vals)
@api.multi
def write(self, vals):
self.clear_caches()
@@ -15,7 +15,6 @@
<tree string="System Parameters">
<field name="key"/>
<field name="value"/>
<field name="group_ids"/>
</tree>
</field>
</record>
@@ -27,7 +26,6 @@
<group>
<field name="key"/>
<field name="value"/>
<field name="group_ids" widget="many2many_tags"/>
</group>
</sheet>
</form>
@@ -127,16 +127,6 @@
<field name="domain_force">['|','|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field>
</record>
<record id="ir_config_parameter_rule" model="ir.rule">
<field name="name">ICP read rule</field>
<field name="model_id" ref="model_ir_config_parameter"/>
<field name="domain_force">['|', ('group_ids','in',user.groups_id.ids), ('group_ids','=',False)]</field>
<field name="perm_read" eval="True"/>
<field name="perm_create" eval="False"/>
<field name="perm_write" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>
<record id="res_currency_rate_rule" model="ir.rule">
<field name="name">multi-company currency rate rule</field>
<field name="model_id" ref="model_res_currency_rate"/>
@@ -88,7 +88,6 @@
"access_res_bank_group_partner_manager","res_bank_group_partner_manager","model_res_bank","group_partner_manager",1,1,1,1
"access_res_bank_user","res_bank user","model_res_bank","group_user",1,0,0,0
"access_ir_filter all","ir_filters all","model_ir_filters",,1,1,1,1
"access_ir_config_parameter","ir_config_parameter","model_ir_config_parameter",,1,0,0,0
"access_ir_config_parameter_system","ir_config_parameter_system","model_ir_config_parameter","group_system",1,1,1,1
"access_ir_mail_server","ir_mail_server","model_ir_mail_server","group_system",1,1,1,1
"access_ir_actions_client","ir_actions_client all","model_ir_actions_client",,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
88 access_res_bank_group_partner_manager res_bank_group_partner_manager model_res_bank group_partner_manager 1 1 1 1
89 access_res_bank_user res_bank user model_res_bank group_user 1 0 0 0
90 access_ir_filter all ir_filters all model_ir_filters 1 1 1 1
access_ir_config_parameter ir_config_parameter model_ir_config_parameter 1 0 0 0
91 access_ir_config_parameter_system ir_config_parameter_system model_ir_config_parameter group_system 1 1 1 1
92 access_ir_mail_server ir_mail_server model_ir_mail_server group_system 1 1 1 1
93 access_ir_actions_client ir_actions_client all model_ir_actions_client 1 0 0 0