[IMP] *: replace web.base.url ICP by helper method

Previous commit introduce an helper to get the most suited URL for a record
instead of always using the ICP, which is not correct in a website context.

This commit replaces calls to ICP by the helper method.

Community: https://github.com/odoo/odoo/pull/68201
Enterprise: https://github.com/odoo/enterprise/pull/17538
Upgrade: https://github.com/odoo/upgrade/pull/2372

task-2476101
This commit is contained in:
Romain Derie
2021-06-02 10:04:29 +00:00
parent add7d995a8
commit 92175d3341
37 changed files with 79 additions and 110 deletions
@@ -26,7 +26,7 @@ class TestPortalAttachment(AccountTestInvoicingHttpCommon):
],
})
cls.base_url = cls.env['ir.config_parameter'].sudo().get_param('web.base.url')
cls.base_url = cls.out_invoice.get_base_url()
@mute_logger('odoo.addons.http_routing.models.ir_http', 'odoo.http')
def test_01_portal_attachment(self):
@@ -205,7 +205,7 @@ class AdyenAccount(models.Model):
'res_id': self.env.company.adyen_account_id.id,
'type': 'ir.actions.act_window',
}
return_url = url_join(self.env['ir.config_parameter'].sudo().get_param('web.base.url'), 'adyen_platforms/create_account')
return_url = url_join(self.env.company.get_base_url(), 'adyen_platforms/create_account')
onboarding_url = self.env['ir.config_parameter'].sudo().get_param('adyen_platforms.onboarding_url')
return {
'type': 'ir.actions.act_url',
@@ -140,7 +140,7 @@
Accept invitation
</a>
</div>
% set website_url = object.env['ir.config_parameter'].sudo().get_param('web.base.url')
% set website_url = object.get_base_url()
Your Odoo domain is: <b><a href='${website_url}'>${website_url}</a></b><br />
Your sign in email is: <b><a href="/web/login?login=${object.email}" target="_blank">${object.email}</a></b><br /><br />
Never heard of Odoo? It’s an all-in-one business software loved by 3+ million users. It will considerably improve your experience at work and increase your productivity.
@@ -166,7 +166,7 @@ class TestLeadConvertMass(crm_common.TestLeadConvertMassCommon):
test_leads = self._create_leads_batch(count=50, user_ids=[False])
user_ids = self.assign_users.ids
with self.assertQueryCount(user_sales_manager=1368): # still some randomness (1366 spotted) - crm only: ??
with self.assertQueryCount(user_sales_manager=1369): # still some randomness (1366 spotted) - crm only: ??
mass_convert = self.env['crm.lead2opportunity.partner.mass'].with_context({
'active_model': 'crm.lead',
'active_ids': test_leads.ids,
+1 -3
View File
@@ -115,8 +115,6 @@ class Digest(models.Model):
digest.next_run_date = digest._get_next_run_date()
def _action_send_to_user(self, user, tips_count=1, consum_tips=True):
web_base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
rendered_body = self.env['mail.render.mixin']._render_template(
'digest.digest_mail_main',
'digest.digest',
@@ -125,7 +123,7 @@ class Digest(models.Model):
add_context={
'title': self.name,
'top_button_label': _('Connect'),
'top_button_url': web_base_url,
'top_button_url': self.get_base_url(),
'company': user.company_id,
'user': user,
'tips_count': tips_count,
@@ -60,17 +60,16 @@ class ImLivechatChannel(models.Model):
def _compute_script_external(self):
view = self.env.ref('im_livechat.external_loader')
values = {
"url": self.env['ir.config_parameter'].sudo().get_param('web.base.url'),
"dbname": self._cr.dbname,
}
for record in self:
values["channel_id"] = record.id
values["url"] = record.get_base_url()
record.script_external = view._render(values) if record.id else False
def _compute_web_page_link(self):
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) if record.id else False
record.web_page = "%s/im_livechat/support/%i" % (record.get_base_url(), record.id) if record.id else False
@api.depends('channel_ids')
def _compute_nbr_channel(self):
@@ -228,7 +227,7 @@ class ImLivechatChannel(models.Model):
username = _('Visitor')
info = {}
info['available'] = len(self._get_available_users()) > 0
info['server_url'] = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
info['server_url'] = self.get_base_url()
if info['available']:
info['options'] = self._get_channel_infos()
info['options']['current_partner_id'] = self.env.user.partner_id.id
+3 -5
View File
@@ -45,13 +45,12 @@ class LinkTracker(models.Model):
@api.depends("url")
def _compute_absolute_url(self):
web_base_url = urls.url_parse(self.env['ir.config_parameter'].sudo().get_param('web.base.url'))
for tracker in self:
url = urls.url_parse(tracker.url)
if url.scheme:
tracker.absolute_url = tracker.url
else:
tracker.absolute_url = web_base_url.join(url).to_url()
tracker.absolute_url = tracker.get_base_url().join(url).to_url()
@api.depends('link_click_ids.link_id')
def _compute_count(self):
@@ -70,12 +69,11 @@ class LinkTracker(models.Model):
@api.depends('code')
def _compute_short_url(self):
for tracker in self:
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
tracker.short_url = urls.url_join(base_url, '/r/%(code)s' % {'code': tracker.code})
tracker.short_url = urls.url_join(tracker.get_base_url(), '/r/%(code)s' % {'code': tracker.code})
def _compute_short_url_host(self):
for tracker in self:
tracker.short_url_host = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + '/r/'
tracker.short_url_host = tracker.get_base_url() + '/r/'
def _compute_code(self):
for tracker in self:
+3 -3
View File
@@ -114,10 +114,10 @@ class MassMailController(http.Controller):
raise exceptions.AccessDenied()
res = mailing.convert_links()
base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url').rstrip('/')
base_url = mailing.get_base_url().rstrip('/')
urls_to_replace = [
(base_url + '/unsubscribe_from_list', mailing._get_unsubscribe_url(email, res_id)),
(base_url + '/view', mailing._get_view_url(email, res_id))
(base_url + '/unsubscribe_from_list', mailing._get_unsubscribe_url(email, res_id)),
(base_url + '/view', mailing._get_view_url(email, res_id))
]
for url_to_replace, new_url in urls_to_replace:
if url_to_replace in res[mailing_id]:
+4 -5
View File
@@ -25,9 +25,8 @@ class MailMail(models.Model):
return mails
def _get_tracking_url(self):
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
token = tools.hmac(self.env(su=True), 'mass_mailing-mail_mail-open', self.id)
return werkzeug.urls.url_join(base_url, 'mail/track/%s/%s/blank.gif' % (self.id, token))
return werkzeug.urls.url_join(self.get_base_url(), 'mail/track/%s/%s/blank.gif' % (self.id, token))
def _send_prepare_body(self):
""" Override to add the tracking URL to the body and to add
@@ -62,14 +61,14 @@ class MailMail(models.Model):
def _send_prepare_values(self, partner=None):
# TDE: temporary addition (mail was parameter) due to semi-new-API
res = super(MailMail, self)._send_prepare_values(partner)
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url').rstrip('/')
if self.mailing_id and res.get('body') and res.get('email_to'):
base_url = self.mailing_id.get_base_url()
emails = tools.email_split(res.get('email_to')[0])
email_to = emails and emails[0] or False
urls_to_replace = [
(base_url + '/unsubscribe_from_list', self.mailing_id._get_unsubscribe_url(email_to, self.res_id)),
(base_url + '/view', self.mailing_id._get_view_url(email_to, self.res_id))
(base_url + '/unsubscribe_from_list', self.mailing_id._get_unsubscribe_url(email_to, self.res_id)),
(base_url + '/view', self.mailing_id._get_view_url(email_to, self.res_id))
]
for url_to_replace, new_url in urls_to_replace:
+4 -6
View File
@@ -596,9 +596,8 @@ class MassMailing(models.Model):
return [rid for rid in res_ids if rid not in done_res_ids]
def _get_unsubscribe_url(self, email_to, res_id):
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
url = werkzeug.urls.url_join(
base_url, 'mail/mailing/%(mailing_id)s/unsubscribe?%(params)s' % {
self.get_base_url(), 'mail/mailing/%(mailing_id)s/unsubscribe?%(params)s' % {
'mailing_id': self.id,
'params': werkzeug.urls.url_encode({
'res_id': res_id,
@@ -610,9 +609,8 @@ class MassMailing(models.Model):
return url
def _get_view_url(self, email_to, res_id):
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
url = werkzeug.urls.url_join(
base_url, 'mailing/%(mailing_id)s/view?%(params)s' % {
self.get_base_url(), 'mailing/%(mailing_id)s/view?%(params)s' % {
'mailing_id': self.id,
'params': werkzeug.urls.url_encode({
'res_id': res_id,
@@ -799,10 +797,10 @@ class MassMailing(models.Model):
random_tip = random.choice(random_tip).tip_description
formatted_date = tools.format_datetime(
self.env, self.sent_date, self.user_id.tz, 'MMM dd, YYYY', self.user_id.lang
self.env, self.sent_date, self.user_id.tz, 'MMM dd, YYYY', self.user_id.lang
) if self.sent_date else False
web_base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
web_base_url = self.get_base_url()
return {
'title': _('24H Stats of %(mailing_type)s "%(mailing_name)s"',
@@ -15,7 +15,7 @@ class TestMassMailingControllers(MassMailCommon, HttpCase):
response = self.url_open(mail_mail._get_tracking_url())
self.assertEqual(response.status_code, 200)
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
base_url = mail_mail.get_base_url()
url = werkzeug.urls.url_join(base_url, 'mail/track/%s/fake_token/blank.gif' % mail_mail.id)
response = self.url_open(url)
+1 -2
View File
@@ -15,7 +15,6 @@ class SmsSms(models.Model):
def _update_body_short_links(self):
""" Override to tweak shortened URLs by adding statistics ids, allowing to
find customer back once clicked. """
shortened_schema = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + '/r/'
res = dict.fromkeys(self.ids, False)
for sms in self:
if not sms.mailing_id or not sms.body:
@@ -24,7 +23,7 @@ class SmsSms(models.Model):
body = sms.body
for url in re.findall(tools.TEXT_URL_REGEX, body):
if url.startswith(shortened_schema):
if url.startswith(sms.get_base_url() + '/r/'):
body = body.replace(url, url + '/s/%s' % sms.id)
res[sms.id] = body
return res
@@ -19,9 +19,8 @@ class SMSComposer(models.TransientModel):
# ------------------------------------------------------------
def _get_unsubscribe_url(self, res_id, trace_code, number):
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
return werkzeug.urls.url_join(
base_url,
self.get_base_url(),
'/sms/%s/%s' % (self.mailing_id.id, trace_code)
)
-11
View File
@@ -420,17 +420,6 @@ class PaymentAcquirer(models.Model):
"""
return True
def _get_base_url(self):
""" Get the base url of the website on which the payment is made.
Note: self.ensure_one()
:return: The website base url
:rtype: str
"""
self.ensure_one()
return self.env['ir.config_parameter'].sudo().get_param('web.base.url')
def _compute_fees(self, amount, currency, country):
""" Compute the transaction fees.
+3 -3
View File
@@ -86,7 +86,7 @@ class AdyenController(http.Controller):
:rtype: dict
"""
acquirer_sudo = request.env['payment.acquirer'].browse(acquirer_id).sudo()
domain = acquirer_sudo._get_base_url()
domain = acquirer_sudo.get_base_url()
data = {
'originDomains': [domain],
}
@@ -144,10 +144,10 @@ class AdyenController(http.Controller):
'allow3DS2': True
},
'channel': 'web', # Required to support 3DS
'origin': acquirer_sudo._get_base_url(), # Required to support 3DS
'origin': acquirer_sudo.get_base_url(), # Required to support 3DS
'browserInfo': browser_info, # Required to support 3DS
'returnUrl': urls.url_join(
acquirer_sudo._get_base_url(),
acquirer_sudo.get_base_url(),
# Include the reference in the return url to be able to match it after redirection.
# The key 'merchantReference' is chosen on purpose to be the same than that returned
# by the /payments endpoint of Adyen.
@@ -29,7 +29,7 @@ class PaymentTransaction(models.Model):
if self.provider != 'alipay':
return res
base_url = self.acquirer_id._get_base_url()
base_url = self.acquirer_id.get_base_url()
if self.fees:
# Similarly to what is done in `payment::payment.transaction.create`, we need to round
# the sum of the amount and of the fees to avoid inconsistent string representations.
@@ -42,7 +42,7 @@ class PaymentTransaction(models.Model):
if self.provider != 'buckaroo':
return res
return_url = urls.url_join(self.acquirer_id._get_base_url(), BuckarooController._return_url)
return_url = urls.url_join(self.acquirer_id.get_base_url(), BuckarooController._return_url)
rendering_values = {
'api_url': self.acquirer_id._buckaroo_get_api_url(),
'Brq_websitekey': self.acquirer_id.buckaroo_website_key,
@@ -41,7 +41,7 @@ class PaymentTransaction(models.Model):
# match in https://docs.adyen.com/checkout/components-web/localization-components, we simply
# provide the lang string as is (after adapting the format) and let Adyen find the best fit.
lang_code = (self._context.get('lang') or 'en-US').replace('_', '-')
base_url = self.acquirer_id._get_base_url()
base_url = self.acquirer_id.get_base_url()
signature = payment_utils.generate_access_token(
converted_amount, self.currency_id.name, self.reference
)
@@ -91,7 +91,7 @@ class PaymentTransaction(models.Model):
converted_amount = payment_utils.to_minor_currency_units(
self.amount, self.currency_id, CURRENCY_DECIMALS.get(self.currency_id.name)
)
base_url = self.acquirer_id._get_base_url()
base_url = self.acquirer_id.get_base_url()
signature = payment_utils.generate_access_token(
converted_amount, self.currency_id.name, self.reference
)
@@ -53,7 +53,7 @@ class PaymentTransaction(models.Model):
if self.acquirer_id.provider != 'ogone':
return res
base_url = self.acquirer_id._get_base_url()
base_url = self.acquirer_id.get_base_url()
return_url = urls.url_join(base_url, OgoneController._flexcheckout_return_url)
rendering_values = {
'ACCOUNT_PSPID': self.acquirer_id.ogone_pspid,
@@ -34,7 +34,7 @@ class PaymentTransaction(models.Model):
if self.provider != 'paypal':
return res
base_url = self.acquirer_id._get_base_url()
base_url = self.acquirer_id.get_base_url()
partner_first_name, partner_last_name = payment_utils.split_partner_name(self.partner_name)
notify_url = self.acquirer_id.paypal_use_ipn \
and urls.url_join(base_url, PaypalController._notify_url)
@@ -88,7 +88,7 @@ class PaymentTransaction(models.Model):
# enter his email on the checkout page.
'customer': customer['id'],
}
base_url = self.acquirer_id._get_base_url()
base_url = self.acquirer_id.get_base_url()
if self.operation == 'online_redirect':
return_url = f'{urls.url_join(base_url, StripeController._checkout_return_url)}' \
f'?reference={urls.url_quote_plus(self.reference)}'
@@ -135,10 +135,11 @@ class PosPaymentMethod(models.Model):
def _proxy_adyen_request_odoo_proxy(self, data, operation):
try:
return self.env.company.sudo().adyen_account_id._adyen_rpc(operation, {
company_sudo = self.env.company.sudo()
return company_sudo.adyen_account_id._adyen_rpc(operation, {
'request_data': data,
'account_code': self.sudo().adyen_payout_id.code,
'notification_url': self.env['ir.config_parameter'].sudo().get_param('web.base.url'),
'notification_url': company_sudo.get_base_url(),
})
except Forbidden:
return {
+1 -1
View File
@@ -61,6 +61,6 @@ class Rating(http.Controller):
record_sudo.rating_apply(rate, token=token, feedback=kwargs.get('feedback'))
lang = rating.partner_id.lang or get_lang(request.env).code
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'].sudo().get_param('web.base.url'),
'web_base_url': rating.get_base_url(),
'rating': rating,
})
+2 -4
View File
@@ -157,13 +157,11 @@ class SurveyCase(common.TransactionCase):
return self.url_open('/survey/%s/%s' % (survey.access_token, token))
def _access_begin(self, survey, token):
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
url = base_url + '/survey/begin/%s/%s' % (survey.access_token, token)
url = survey.get_base_url() + '/survey/begin/%s/%s' % (survey.access_token, token)
return self.opener.post(url=url, json={})
def _access_submit(self, survey, token, post_data):
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
url = base_url + '/survey/submit/%s/%s' % (survey.access_token, token)
url = survey.get_base_url() + '/survey/submit/%s/%s' % (survey.access_token, token)
return self.opener.post(url=url, json={'params': post_data})
def _find_csrf_token(self, text):
+1 -2
View File
@@ -98,9 +98,8 @@ class SurveyInvite(models.TransientModel):
@api.depends('survey_id.access_token')
def _compute_survey_start_url(self):
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for invite in self:
invite.survey_start_url = werkzeug.urls.url_join(base_url, invite.survey_id.get_start_url()) if invite.survey_id else False
invite.survey_start_url = werkzeug.urls.url_join(invite.survey_id.get_base_url(), invite.survey_id.get_start_url()) if invite.survey_id else False
# Overrides of mail.composer.mixin
@api.depends('survey_id') # fake trigger otherwise not computed in new mode
+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'].sudo().get_param('web.base.url')
base_url = self.get_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)
+2 -2
View File
@@ -1162,7 +1162,7 @@ class Crawler(HttpCase):
# | Filter By Country
self.authenticate("admin", "admin")
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
base_url = website_1.get_base_url()
# Simulate website 2 (that use only generic views)
self.url_open(base_url + '/website/force/%s' % website_2.id)
@@ -1373,7 +1373,7 @@ class Crawler(HttpCase):
# ########################################################
# Test the controller (which is calling get_related_views)
self.authenticate("admin", "admin")
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
base_url = website_1.get_base_url()
# Simulate website 2
self.url_open(base_url + '/website/force/%s' % website_2.id)
@@ -27,7 +27,7 @@ class CrmLeadForwardToPartner(models.TransientModel):
'lead_location': ", ".join(lead_location),
'partner_assigned_id': partner and partner.id or False,
'partner_location': ", ".join(partner_location),
'lead_link': self.get_lead_portal_url(lead.id, lead.type),
'lead_link': self.get_lead_portal_url(lead),
}
@api.model
@@ -103,18 +103,22 @@ class CrmLeadForwardToPartner(models.TransientModel):
self.env['crm.lead'].message_subscribe([partner_id])
return True
def get_lead_portal_url(self, lead_id, type):
action = type == 'opportunity' and 'action_portal_opportunities' or 'action_portal_leads'
def get_lead_portal_url(self, lead):
action = lead.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'].sudo().get_param('web.base.url'),
lead.get_base_url(),
self.env.cr.dbname,
lead_id,
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'].sudo().get_param('web.base.url'), self.env.cr.dbname)
if self:
portal_url = self[0].get_base_url()
else:
portal_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
portal_link = "%s/?db=%s" % (portal_url, self.env.cr.dbname)
return portal_link
forward_type = fields.Selection([
@@ -12,11 +12,11 @@ class RecruitmentSource(models.Model):
url = fields.Char(compute='_compute_url', string='Url Parameters')
@api.depends('source_id', 'source_id.name', 'job_id')
@api.depends('source_id', 'source_id.name', 'job_id', 'job_id.company_id')
def _compute_url(self):
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for source in self:
source.url = urls.url_join(base_url, "%s?%s" % (source.job_id.website_url,
source.url = urls.url_join(source.job_id.get_base_url(), "%s?%s" % (
source.job_id.website_url,
urls.url_encode({
'utm_campaign': self.env.ref('hr_recruitment.utm_campaign_job').name,
'utm_medium': self.env.ref('utm.utm_medium_website').name,
+1 -1
View File
@@ -36,7 +36,7 @@ class TestLivechatCommon(tests.TransactionCase):
}] + [visitor_vals]*self.max_sessions_per_operator)
self.visitor_demo, self.visitor = self.visitors[0], self.visitors[1]
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
base_url = self.livechat_channel.get_base_url()
self.open_chat_url = base_url + "/im_livechat/get_session"
self.open_chat_params = {'params': {
@@ -12,7 +12,7 @@ class MailGroup(models.Model):
def _notify_email_header_dict(self):
headers = super(MailGroup, self)._notify_email_header_dict()
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
base_url = self.get_base_url()
headers['List-Archive'] = '<%s/groups/%s>' % (base_url, slug(self))
headers['List-Subscribe'] = '<%s/groups>' % (base_url)
headers['List-Unsubscribe'] = '<%s/groups?unsubscribe>' % (base_url,)
@@ -14,7 +14,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'].sudo().get_param('web.base.url')
base_url = channel.get_base_url()
vals = {
'maillist': _('Mailing-List'),
'post_to': _('Post to'),
@@ -13,20 +13,9 @@ class PaymentAcquirer(models.Model):
ondelete="restrict",
)
def _get_base_url(self):
""" Override of payment to take multi-website feature into account.
Note: self.ensure_one()
:return: The website base url
:rtype: str
"""
def get_base_url(self):
self.ensure_one()
url = ''
if request: # Give priority to url_root to handle multi-website cases
url = request.httprequest.url_root
if not url and self.website_id: # Secondly, use the website set on the acquirer
url = self.website_id._get_http_domain()
if not url: # Fallback to web.base.url
url = super()._get_base_url()
return url
# Give priority to url_root to handle multi-website cases
if request and request.httprequest.url_root:
return request.httprequest.url_root
return super().get_base_url()
+1 -2
View File
@@ -52,8 +52,7 @@ class Users(models.Model):
'email': self.email
}
params.update(kwargs)
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
token_url = base_url + '/profile/validate_email?%s' % urls.url_encode(params)
token_url = self.get_base_url() + '/profile/validate_email?%s' % urls.url_encode(params)
with self._cr.savepoint():
activation_template.sudo().with_context(token_url=token_url).send_mail(
self.id, force_send=True, raise_exception=True)
+4 -4
View File
@@ -1154,13 +1154,13 @@ class WebsiteSlides(WebsiteProfile):
# slide, the error will be the website.403 page instead of the one of the website_slides.embed_slide.
# Do not forget the rendering here will be displayed in the embedded iframe
# determine if it is embedded from external web page
referrer_url = request.httprequest.headers.get('Referer', '')
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:
slide = request.env['slide.slide'].browse(slide_id)
# determine if it is embedded from external web page
referrer_url = request.httprequest.headers.get('Referer', '')
base_url = slide.get_base_url()
is_embedded = referrer_url and not bool(base_url in referrer_url) or False
if is_embedded:
request.env['slide.embed'].sudo()._add_embed_url(slide.id, referrer_url)
values = self._get_slide_detail(slide)
+7 -7
View File
@@ -334,10 +334,12 @@ class Slide(models.Model):
@api.depends('document_id', 'slide_type', 'mime_type')
def _compute_embed_code(self):
base_url = request and request.httprequest.url_root or self.env['ir.config_parameter'].sudo().get_param('web.base.url')
if base_url[-1] == '/':
base_url = base_url[:-1]
base_url = request and request.httprequest.url_root
for record in self:
if not base_url:
base_url = record.get_base_url()
if base_url[-1] == '/':
base_url = base_url[:-1]
if record.datas and (not record.document_id or record.slide_type in ['document', 'presentation']):
slide_url = base_url + url_for('/slides/embed/%s?page=1' % record.id)
record.embed_code = '<iframe src="%s" class="o_wslides_iframe_viewer" allowFullScreen="true" height="%s" width="%s" frameborder="0"></iframe>' % (slide_url, 315, 420)
@@ -515,10 +517,9 @@ class Slide(models.Model):
# ---------------------------------------------------------
def _post_publication(self):
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_field('body_html', slide.ids)[slide.id]
html_body = publish_template.with_context(base_url=slide.get_base_url())._render_field('body_html', slide.ids)[slide.id]
subject = publish_template._render_field('subject', slide.ids)[slide.id]
# We want to use the 'reply_to' of the template if set. However, `mail.message` will check
# if the key 'reply_to' is in the kwargs before calling _get_reply_to. If the value is
@@ -548,12 +549,11 @@ class Slide(models.Model):
def _send_share_email(self, email, fullscreen):
# TDE FIXME: template to check
mail_ids = []
base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url')
for record in self:
template = record.channel_id.share_template_id.with_context(
user=self.env.user,
email=email,
base_url=base_url,
base_url=record.get_base_url(),
fullscreen=fullscreen
)
email_values = {'email_to': email}
+1 -1
View File
@@ -349,13 +349,13 @@ class IrActionsReport(models.Model):
:return: bodies, header, footer, specific_paperformat_args
'''
IrConfig = self.env['ir.config_parameter'].sudo()
base_url = IrConfig.get_param('report.url') or IrConfig.get_param('web.base.url')
# Return empty dictionary if 'web.minimal_layout' not found.
layout = self.env.ref('web.minimal_layout', False)
if not layout:
return {}
layout = self.env['ir.ui.view'].browse(self.env['ir.ui.view'].get_view_id('web.minimal_layout'))
base_url = IrConfig.get_param('report.url') or layout.get_base_url()
root = lxml.html.fromstring(html)
match_klass = "//div[contains(concat(' ', normalize-space(@class), ' '), ' {} ')]"