[REF] website_*: remove render method on website

Since saas-3, website controllers use `request.website.render`
to render the template of a web page. This was kept for retro
compatibility. It's time to stop using deprecated stuff.
Same for `_render` method on website.

'json' route don't use `request.render` since
`JsonRequest` has no `render` method.
This commit is contained in:
Jérome Maes
2016-08-04 12:02:14 +02:00
parent fd09ddb6f3
commit 8a399930f3
36 changed files with 171 additions and 170 deletions
+15 -15
View File
@@ -24,15 +24,15 @@ class WebsiteSurvey(http.Controller):
# In case of auth required, block public user
if survey.auth_required and request.env.user == request.website.user_id:
return request.website.render("survey.auth_required", {'survey': survey, 'token': token})
return request.render("survey.auth_required", {'survey': survey, 'token': token})
# In case of non open surveys
if survey.stage_id.closed:
return request.website.render("survey.notopen")
return request.render("survey.notopen")
# If there is no pages
if not survey.page_ids:
return request.website.render("survey.nopages")
return request.render("survey.nopages")
# Everything seems to be ok
return None
@@ -46,7 +46,7 @@ class WebsiteSurvey(http.Controller):
dt_deadline = fields.Datetime.from_string(deadline)
dt_now = datetime.now()
if dt_now > dt_deadline: # survey is not open anymore
return request.website.render("survey.notopen")
return request.render("survey.notopen")
return None
## ROUTES HANDLERS ##
@@ -63,7 +63,7 @@ class WebsiteSurvey(http.Controller):
_logger.info("[survey] Phantom mode")
user_input = UserInput.create({'survey_id': survey.id, 'test_entry': True})
data = {'survey': survey, 'page': None, 'token': user_input.token}
return request.website.render('survey.survey_init', data)
return request.render('survey.survey_init', data)
# END Test mode
# Controls if the survey can be displayed
@@ -80,7 +80,7 @@ class WebsiteSurvey(http.Controller):
else:
user_input = UserInput.sudo().search([('token', '=', token)], limit=1)
if not user_input:
return request.website.render("website.403")
return request.render("website.403")
# Do not open expired survey
errpage = self._check_deadline(user_input)
@@ -90,7 +90,7 @@ class WebsiteSurvey(http.Controller):
# Select the right page
if user_input.state == 'new': # Intro page
data = {'survey': survey, 'page': None, 'token': user_input.token}
return request.website.render('survey.survey_init', data)
return request.render('survey.survey_init', data)
else:
return request.redirect('/survey/fill/%s/%s' % (survey.id, user_input.token))
@@ -112,7 +112,7 @@ class WebsiteSurvey(http.Controller):
try:
user_input = UserInput.sudo().search([('token', '=', token)], limit=1)
except IndexError: # Invalid token
return request.website.render("website.403")
return request.render("website.403")
# Do not display expired survey (even if some pages have already been
# displayed -- There's a time for everything!)
@@ -126,9 +126,9 @@ class WebsiteSurvey(http.Controller):
data = {'survey': survey, 'page': page, 'page_nr': page_nr, 'token': user_input.token}
if last:
data.update({'last': True})
return request.website.render('survey.survey', data)
return request.render('survey.survey', data)
elif user_input.state == 'done': # Display success message
return request.website.render('survey.sfinished', {'survey': survey,
return request.render('survey.sfinished', {'survey': survey,
'token': token,
'user_input': user_input})
elif user_input.state == 'skip':
@@ -142,9 +142,9 @@ class WebsiteSurvey(http.Controller):
data = {'survey': survey, 'page': page, 'page_nr': page_nr, 'token': user_input.token}
if last:
data.update({'last': True})
return request.website.render('survey.survey', data)
return request.render('survey.survey', data)
else:
return request.website.render("website.403")
return request.render("website.403")
# AJAX prefilling of a survey
@http.route(['/survey/prefill/<model("survey.survey"):survey>/<string:token>',
@@ -225,7 +225,7 @@ class WebsiteSurvey(http.Controller):
try:
user_input = request.env['survey.user_input'].sudo().search([('token', '=', post['token'])], limit=1)
except KeyError: # Invalid token
return request.website.render("website.403")
return request.render("website.403")
user_id = request.env.user.id if user_input.type != 'link' else SUPERUSER_ID
for question in questions:
@@ -252,7 +252,7 @@ class WebsiteSurvey(http.Controller):
def print_survey(self, survey, token=None, **post):
'''Display an survey in printable view; if <token> is set, it will
grab the answers of the user_input_id that has <token>.'''
return request.website.render('survey.survey_print',
return request.render('survey.survey_print',
{'survey': survey,
'token': token,
'page_nr': 0,
@@ -276,7 +276,7 @@ class WebsiteSurvey(http.Controller):
filter_data = self.get_filter_data(post)
current_filters = survey.filter_input_ids(filter_data, filter_finish)
filter_display_data = survey.get_filter_display_data(filter_data)
return request.website.render(result_template,
return request.render(result_template,
{'survey': survey,
'survey_dict': self.prepare_result_dict(survey, current_filters),
'page_range': self.page_range,
+1 -1
View File
@@ -238,7 +238,7 @@ class Website(Home):
@http.route(['/website/snippets'], type='json', auth="user", website=True)
def snippets(self):
return request.website._render('website.snippets')
return request.env['ir.ui.view'].render_template('website.snippets')
@http.route('/website/reset_templates', type='http', auth='user', methods=['POST'], website=True)
def reset_template(self, templates, redirect='/'):
+2 -2
View File
@@ -299,9 +299,9 @@ class Http(models.AbstractModel):
self._auth_method_public()
try:
html = request.website._render('website.%s' % code, values)
html = request.env['ir.ui.view'].render_template('website.%s' % code, values)
except Exception:
html = request.website._render('website.http_error', values)
html = request.env['ir.ui.view'].render_template('website.http_error', values)
return werkzeug.wrappers.Response(html, status=code, content_type='text/html;charset=utf-8')
def binary_content(self, xmlid=None, model='ir.attachment', id=None, field='datas', unique=False, filename=None, filename_field='datas_fname', download=False, mimetype=None, default_mimetype='application/octet-stream', env=None):
-9
View File
@@ -424,15 +424,6 @@ class Website(models.Model):
raise NotFound
return View.browse(view_id)
@api.model
def render(self, template, values=None, status_code=None):
# TODO: remove this. (just kept for backward api compatibility for saas-3)
return request.render(template, values, uid=self._uid)
def _render(self, template, values=None):
# TODO: remove this. (just kept for backward api compatibility for saas-3)
return self.env['ir.ui.view'].render_template(template, values=values)
@api.model
def pager(self, url, total, page=1, step=30, scope=5, url_args=None):
""" Generate a dict with required value to render `website.pager` template. This method compute
+2
View File
@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import test_converter
import test_crawl
import test_ui
+5
View File
@@ -1,8 +1,12 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import unittest
from odoo.addons.website.models.website import slugify, unslug
class TestUnslug(unittest.TestCase):
def test_unslug(self):
tests = {
'': (None, None),
@@ -28,6 +32,7 @@ class TestTitleToSlug(unittest.TestCase):
Those tests should pass with or without python-slugify
See website/models/website.py slugify method
"""
def test_spaces(self):
self.assertEqual(
"spaces",
+3
View File
@@ -1,4 +1,6 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import logging
import urlparse
import time
@@ -10,6 +12,7 @@ import re
_logger = logging.getLogger(__name__)
class Crawler(odoo.tests.HttpCase):
""" Test suite crawling an Odoo CMS instance and checking that all
internal links lead to a 200 response.
+5
View File
@@ -1,7 +1,12 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import odoo
import odoo.tests
class TestUi(odoo.tests.HttpCase):
def test_01_public_homepage(self):
self.phantom_js("/", "console.log('ok')", "'website.snippets.animation' in odoo.__DEBUG__.services")
+29 -34
View File
@@ -1,11 +1,13 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import itertools
import unittest
from lxml import etree as ET, html
from lxml.html import builder as h
from openerp.tests import common
from odoo.tests import common
def attrs(**kwargs):
@@ -13,6 +15,7 @@ def attrs(**kwargs):
class TestViewSaving(common.TransactionCase):
def eq(self, a, b):
self.assertEqual(a.tag, b.tag)
self.assertEqual(a.attrib, b.attrib)
@@ -38,7 +41,7 @@ class TestViewSaving(common.TransactionCase):
h.LI(h.SPAN("+00 00 000 00 0 000", attrs(model='res.company', id=1, field='phone', type='char')))
))
)
self.view_id = self.registry('ir.ui.view').create(self.cr, self.uid, {
self.view_id = self.env['ir.ui.view'].create({
'name': "Test View",
'type': 'qweb',
'arch': ET.tostring(self.arch, encoding='utf-8').decode('utf-8')
@@ -60,7 +63,7 @@ class TestViewSaving(common.TransactionCase):
self.env['ir.ui.view'].save_embedded_field(embedded)
company = self.registry('res.company').browse(self.cr, self.uid, 1)
company = self.env['res.company'].browse(1)
self.assertEqual(company.phone, "+00 00 000 00 0 000")
@unittest.skip("save conflict for embedded (saved by third party or previous version in page) not implemented")
@@ -91,31 +94,26 @@ class TestViewSaving(common.TransactionCase):
att['class'] = "foo bar"
embedded = h.SPAN("My Company", att)
self.eq(View.to_field_ref(embedded),
h.SPAN({'t-field': 'bob', 'class': 'foo bar', 'id': 'whop'}))
self.eq(View.to_field_ref(embedded), h.SPAN({'t-field': 'bob', 'class': 'foo bar', 'id': 'whop'}))
def test_replace_arch(self):
replacement = h.P("Wheee")
result = self.registry('ir.ui.view').replace_arch_section(
self.cr, self.uid, [self.view_id], None, replacement)
result = self.view_id.replace_arch_section(None, replacement)
self.eq(result, h.DIV("Wheee"))
def test_replace_arch_2(self):
replacement = h.DIV(h.P("Wheee"))
result = self.registry('ir.ui.view').replace_arch_section(
self.cr, self.uid, [self.view_id], None, replacement)
result = self.view_id.replace_arch_section(None, replacement)
self.eq(result, replacement)
def test_fixup_arch(self):
replacement = h.H1("I am the greatest title alive!")
result = self.registry('ir.ui.view').replace_arch_section(
self.cr, self.uid, [self.view_id], '/div/div[1]/h3',
replacement)
result = self.view_id.replace_arch_section('/div/div[1]/h3', replacement)
self.eq(result, h.DIV(
h.DIV(
@@ -135,12 +133,10 @@ class TestViewSaving(common.TransactionCase):
def test_multiple_xpath_matches(self):
with self.assertRaises(ValueError):
self.registry('ir.ui.view').replace_arch_section(
self.cr, self.uid, [self.view_id], '/div/div/h3',
h.H6("Lol nope"))
self.view_id.replace_arch_section('/div/div/h3', h.H6("Lol nope"))
def test_save(self):
Company = self.registry('res.company')
Company = self.env['res.company']
View = self.env['ir.ui.view']
replacement = ET.tostring(h.DIV(
@@ -151,13 +147,13 @@ class TestViewSaving(common.TransactionCase):
h.LI(h.SPAN("+12 3456789", attrs(model='res.company', id=1, field='phone', expression="edmund", type='char'))),
)
), encoding='utf-8')
View.browse(self.view_id).save(value=replacement, xpath='/div/div[2]')
self.view_id.save(value=replacement, xpath='/div/div[2]')
company = Company.browse(self.cr, self.uid, 1)
company = Company.browse(1)
self.assertEqual(company.name, "Acme Corporation")
self.assertEqual(company.phone, "+12 3456789")
self.eq(
ET.fromstring(View.browse(self.view_id).arch.encode('utf-8')),
ET.fromstring(self.view_id.arch.encode('utf-8')),
h.DIV(
h.DIV(
h.H3("Column 1"),
@@ -177,36 +173,35 @@ class TestViewSaving(common.TransactionCase):
def test_save_escaped_text(self):
""" Test saving html special chars in text nodes """
view_id = self.registry('ir.ui.view').create(self.cr, self.uid, {
'arch':'<t><p><h1>hello world</h1></p></t>',
'type':'qweb'
view = self.env['ir.ui.view'].create({
'arch': '<t><p><h1>hello world</h1></p></t>',
'type': 'qweb'
})
view = self.env['ir.ui.view'].browse(view_id)
# script and style text nodes should not escaped client side
replacement = '<script>1 && "hello & world"</script>'
view.save(replacement, xpath='/t/p/h1')
self.assertIn(
replacement.replace('&', '&amp;'),
view.arch,
'inline script should be escaped server side'
replacement.replace('&', '&amp;'),
view.arch,
'inline script should be escaped server side'
)
self.assertIn(
replacement,
view.render(),
'inline script should not be escaped when rendering'
replacement,
view.render(),
'inline script should not be escaped when rendering'
)
# common text nodes should be be escaped client side
replacement = 'world &amp;amp; &amp;lt;b&amp;gt;cie'
view.save(replacement, xpath='/t/p')
self.assertIn(replacement, view.arch, 'common text node should not be escaped server side')
self.assertIn(
replacement,
view.render().replace('&', '&amp;'),
'text node characters wrongly unescaped when rendering'
replacement,
view.render().replace('&', '&amp;'),
'text node characters wrongly unescaped when rendering'
)
def test_save_only_embedded(self):
Company = self.registry('res.company')
Company = self.env['res.company']
company_id = 1
company = Company.browse(company_id)
company.write({'name': "Foo Corporation"})
@@ -226,7 +221,7 @@ class TestViewSaving(common.TransactionCase):
field='phone', expression="edmund")),
"whop whop"
), encoding="utf-8")
View.browse(self.view_id).save(value=replacement, xpath='/div/div[2]/ul/li[3]')
self.view_id.save(value=replacement, xpath='/div/div[2]/ul/li[3]')
self.eq(
ET.fromstring(self.view_id.arch.encode('utf-8')),
+3 -3
View File
@@ -59,7 +59,7 @@ class WebsiteBlog(http.Controller):
post_ids = blog_obj.search(cr, uid, [], offset=(page-1)*self._blog_post_per_page, limit=self._blog_post_per_page, context=context)
posts = blog_obj.browse(cr, uid, post_ids, context=context)
blog_url = QueryURL('', ['blog', 'tag'])
return request.website.render("website_blog.latest_blogs", {
return request.render("website_blog.latest_blogs", {
'posts': posts,
'pager': pager,
'blog_url': blog_url,
@@ -160,7 +160,7 @@ class WebsiteBlog(http.Controller):
'blog_url': blog_url,
'date': date_begin,
}
response = request.website.render("website_blog.blog_post_short", values)
response = request.render("website_blog.blog_post_short", values)
return response
@http.route(['/blog/<model("blog.blog"):blog>/feed'], type='http', auth="public")
@@ -241,7 +241,7 @@ class WebsiteBlog(http.Controller):
'pager': pager,
'comments': comments,
}
response = request.website.render("website_blog.blog_post_complete", values)
response = request.render("website_blog.blog_post_complete", values)
request.session[request.session_id] = request.session.get(request.session_id, [])
if not (blog_post.id in request.session[request.session_id]):
@@ -73,7 +73,7 @@ class WebsiteAccount(website_account):
'default_url': '/my/leads',
'pager': pager
})
return request.website.render("website_crm_partner_assign.portal_my_leads", values)
return request.render("website_crm_partner_assign.portal_my_leads", values)
@http.route(['/my/opportunities', '/my/opportunities/page/<int:page>'], type='http', auth="user", website=True)
def portal_my_opportunities(self, page=1, date_begin=None, date_end=None, opportunity=None, sortby=None, **kw):
@@ -134,15 +134,15 @@ class WebsiteAccount(website_account):
'default_url': '/my/opportunities',
'pager': pager
})
return request.website.render("website_crm_partner_assign.portal_my_opportunities", values)
return request.render("website_crm_partner_assign.portal_my_opportunities", values)
@http.route(['/my/lead/<model("crm.lead"):lead>'], type='http', auth="user", website=True)
def portal_my_lead(self, lead=None, **kw):
return request.website.render("website_crm_partner_assign.portal_my_lead", {'lead': lead})
return request.render("website_crm_partner_assign.portal_my_lead", {'lead': lead})
@http.route(['/my/opportunity/<model("crm.lead"):lead>'], type='http', auth="user", website=True)
def portal_my_opportunity(self, lead=None, **kw):
return request.website.render(
return request.render(
"website_crm_partner_assign.portal_my_opportunity", {
'opportunity': lead,
'stages': request.env['crm.stage'].search([('probability', '!=', '100')], order='sequence desc'),
@@ -292,5 +292,5 @@ class WebsiteCrmPartnerAssign(WebsitePartnerPage):
'current_grade': current_grade,
'current_country': current_country
}
return request.website.render("website_crm_partner_assign.partner", values)
return request.render("website_crm_partner_assign.partner", values)
return self.partners(**post)
+2 -2
View File
@@ -96,7 +96,7 @@ class WebsiteCustomer(http.Controller):
'tag': tag,
'tags': tags,
}
return request.website.render("website_customer.index", values)
return request.render("website_customer.index", values)
# Do not use semantic controller due to SUPERUSER_ID
@http.route(['/customers/<partner_id>'], type='http', auth="public", website=True)
@@ -107,5 +107,5 @@ class WebsiteCustomer(http.Controller):
if partner.exists() and partner.website_published:
values = {}
values['main_object'] = values['partner'] = partner
return request.website.render("website_customer.details", values)
return request.render("website_customer.details", values)
return self.customers(**post)
+6 -6
View File
@@ -131,7 +131,7 @@ class WebsiteEventController(http.Controller):
'search_path': "?%s" % werkzeug.url_encode(searches),
}
return request.website.render("website_event.index", values)
return request.render("website_event.index", values)
@http.route(['/event/<model("event.event"):event>/page/<path:page>'], type='http', auth="public", website=True)
def event_page(self, event, page, **post):
@@ -151,7 +151,7 @@ class WebsiteEventController(http.Controller):
values['from_template'] = 'website_event.default_page' # .strip('website_event.')
page = 'website.page_404'
return request.website.render(page, values)
return request.render(page, values)
@http.route(['/event/<model("event.event"):event>'], type='http', auth="public", website=True)
def event(self, event, **post):
@@ -170,7 +170,7 @@ class WebsiteEventController(http.Controller):
'main_object': event,
'range': range,
}
return request.website.render("website_event.event_description_full", values)
return request.render("website_event.event_description_full", values)
@http.route('/event/add_event', type='http', auth="user", methods=['POST'], website=True)
def add_event(self, event_name="New Event", **kwargs):
@@ -215,7 +215,7 @@ class WebsiteEventController(http.Controller):
"date": self.get_formated_date(event),
"event": event,
"url": event.website_url})
return request.website.render("website_event.country_events_list", result)
return request.render("website_event.country_events_list", result)
def _process_tickets_details(self, data):
nb_register = int(data.get('nb_register-0', 0))
@@ -228,7 +228,7 @@ class WebsiteEventController(http.Controller):
tickets = self._process_tickets_details(post)
if not tickets:
return request.redirect("/event/%s" % slug(event))
return request.website._render("website_event.registration_attendee_details", {'tickets': tickets, 'event': event})
return request.env['ir.ui.view'].render_template("website_event.registration_attendee_details", {'tickets': tickets, 'event': event})
def _process_registration_details(self, details):
''' Process data posted from the attendee details form. '''
@@ -255,7 +255,7 @@ class WebsiteEventController(http.Controller):
Attendees += Attendees.sudo().create(
Attendees._prepare_attendee_values(registration))
return request.website.render("website_event.registration_complete", {
return request.render("website_event.registration_complete", {
'attendees': Attendees,
'event': event,
})
@@ -16,7 +16,7 @@ class WebsiteEventSaleController(WebsiteEventController):
'main_object': event.with_context(pricelist=pricelist_id),
'range': range,
}
return request.website.render("website_event.event_description_full", values)
return request.render("website_event.event_description_full", values)
def _process_tickets_details(self, data):
ticket_post = {}
@@ -47,7 +47,7 @@ class WebsiteEventSaleController(WebsiteEventController):
attendees = request.env['event.registration'].browse(list(attendee_ids))
# clean context and session, then redirect to the confirmation page
request.website.sale_reset()
return request.website.render("website_event.registration_complete", {
return request.render("website_event.registration_complete", {
'attendees': attendees,
'event': event,
})
@@ -16,7 +16,7 @@ class WebsiteEventTrackController(http.Controller):
def event_track_view(self, event, track, **post):
track = track.sudo()
values = {'track': track, 'event': track.event_id, 'main_object': track}
return request.website.render("website_event_track.track_view", values)
return request.render("website_event_track.track_view", values)
def _prepare_calendar(self, event, event_track_ids):
local_tz = pytz.timezone(event.date_tz or 'UTC')
@@ -72,7 +72,7 @@ class WebsiteEventTrackController(http.Controller):
speakers_name = u" – ".join(track.speaker_ids.mapped('name'))
speakers[track.id] = speakers_name
return request.website.render("website_event_track.agenda", {
return request.render("website_event_track.agenda", {
'event': event,
'days': days,
'days_nbr': days_tracks_count,
@@ -100,11 +100,11 @@ class WebsiteEventTrackController(http.Controller):
'searches': searches,
'html2plaintext': html2plaintext
}
return request.website.render("website_event_track.tracks", values)
return request.render("website_event_track.tracks", values)
@http.route(['''/event/<model("event.event", "[('show_track_proposal','=',1)]"):event>/track_proposal'''], type='http', auth="public", website=True)
def event_track_proposal(self, event, **post):
return request.website.render("website_event_track.event_track_proposal", {'event': event})
return request.render("website_event_track.event_track_proposal", {'event': event})
@http.route(['/event/<model("event.event"):event>/track_proposal/post'], type='http', auth="public", methods=['POST'], website=True)
def event_track_proposal_post(self, event, **post):
@@ -130,4 +130,4 @@ class WebsiteEventTrackController(http.Controller):
partner = request.env['res.partner'].sudo().search([('email', '=', post['email_from'])])
if partner:
track.sudo().message_subscribe(partner_ids=partner.ids)
return request.website.render("website_event_track.event_track_proposal_success", {'track': track, 'event': event})
return request.render("website_event_track.event_track_proposal_success", {'track': track, 'event': event})
+19 -19
View File
@@ -81,7 +81,7 @@ class WebsiteForum(http.Controller):
@http.route(['/forum'], type='http', auth="public", website=True)
def forum(self, **kwargs):
forums = request.env['forum.forum'].search([])
return request.website.render("website_forum.forum_all", {'forums': forums})
return request.render("website_forum.forum_all", {'forums': forums})
@http.route('/forum/new', type='http', auth="user", methods=['POST'], website=True)
def forum_create(self, forum_name="New Forum", add_menu=False):
@@ -163,12 +163,12 @@ class WebsiteForum(http.Controller):
'search': search,
'post_type': post_type,
})
return request.website.render("website_forum.forum_index", values)
return request.render("website_forum.forum_index", values)
@http.route(['/forum/<model("forum.forum"):forum>/faq'], type='http', auth="public", website=True)
def forum_faq(self, forum, **post):
values = self._prepare_forum_values(forum=forum, searches=dict(), header={'is_guidelines': True}, **post)
return request.website.render("website_forum.faq", values)
return request.render("website_forum.faq", values)
@http.route('/forum/get_tags', type='http', auth="public", methods=['GET'], website=True)
def tag_read(self, q='', l=25, **post):
@@ -204,11 +204,11 @@ class WebsiteForum(http.Controller):
'pager_tag_chars': first_char_list,
'active_char_tag': active_char_tag,
})
return request.website.render("website_forum.tag", values)
return request.render("website_forum.tag", values)
@http.route('/forum/<model("forum.forum"):forum>/edit_welcome_message', auth="user", website=True)
def edit_welcome_message(self, forum, **kw):
return request.website.render("website_forum.edit_welcome_message", {'forum': forum})
return request.render("website_forum.edit_welcome_message", {'forum': forum})
# Questions
# --------------------------------------------------
@@ -247,7 +247,7 @@ class WebsiteForum(http.Controller):
'filters': filters,
'reversed': reversed,
})
return request.website.render("website_forum.post_description_full", values)
return request.render("website_forum.post_description_full", values)
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/toggle_favourite', type='json', auth="user", methods=['POST'], website=True)
def question_toggle_favorite(self, forum, question, **post):
@@ -272,7 +272,7 @@ class WebsiteForum(http.Controller):
'forum': forum,
'reasons': reasons,
})
return request.website.render("website_forum.close_post", values)
return request.render("website_forum.close_post", values)
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/edit_answer', type='http', auth="user", website=True)
def question_edit_answer(self, forum, question, **kwargs):
@@ -312,14 +312,14 @@ class WebsiteForum(http.Controller):
if not user.email or not tools.single_email_re.match(user.email):
return werkzeug.utils.redirect("/forum/%s/user/%s/edit?email_required=1" % (slug(forum), request.session.uid))
values = self._prepare_forum_values(forum=forum, searches={}, header={'ask_hide': True})
return request.website.render("website_forum.new_%s" % post_type, values)
return request.render("website_forum.new_%s" % post_type, values)
@http.route(['/forum/<model("forum.forum"):forum>/new',
'/forum/<model("forum.forum"):forum>/<model("forum.post"):post_parent>/reply'],
type='http', auth="user", methods=['POST'], website=True)
def post_create(self, forum, post_parent=None, post_type=None, **post):
if post_type == 'question' and not post.get('post_name', '').strip():
return request.website.render('website.http_error', {'status_code': _('Bad Request'), 'status_message': _('Title should not be empty.')})
return request.render('website.http_error', {'status_code': _('Bad Request'), 'status_message': _('Title should not be empty.')})
post_tag_ids = forum._tag_to_write_vals(post.get('post_tags', ''))
new_question = request.env['forum.post'].create({
'forum_id': forum.id,
@@ -378,12 +378,12 @@ class WebsiteForum(http.Controller):
'content': post.name,
})
template = "website_forum.new_link" if post.post_type == 'link' and not post.parent_id else "website_forum.edit_post"
return request.website.render(template, values)
return request.render(template, values)
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/save', type='http', auth="user", methods=['POST'], website=True)
def post_save(self, forum, post, **kwargs):
if 'post_name' in kwargs and not kwargs.get('post_name').strip():
return request.website.render('website.http_error', {'status_code': _('Bad Request'), 'status_message': _('Title should not be empty.')})
return request.render('website.http_error', {'status_code': _('Bad Request'), 'status_message': _('Title should not be empty.')})
post_tags = forum._tag_to_write_vals(kwargs.get('post_tags', ''))
vals = {
'tag_ids': post_tags,
@@ -442,7 +442,7 @@ class WebsiteForum(http.Controller):
'queue_type': 'validation',
})
return request.website.render("website_forum.moderation_queue", values)
return request.render("website_forum.moderation_queue", values)
@http.route('/forum/<model("forum.forum"):forum>/flagged_queue', type='http', auth="user", website=True)
def flagged_queue(self, forum):
@@ -460,7 +460,7 @@ class WebsiteForum(http.Controller):
'queue_type': 'flagged',
})
return request.website.render("website_forum.moderation_queue", values)
return request.render("website_forum.moderation_queue", values)
@http.route('/forum/<model("forum.forum"):forum>/offensive_posts', type='http', auth="user", website=True)
def offensive_posts(self, forum):
@@ -478,7 +478,7 @@ class WebsiteForum(http.Controller):
'queue_type': 'offensive',
})
return request.website.render("website_forum.moderation_queue", values)
return request.render("website_forum.moderation_queue", values)
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/validate', type='http', auth="user", website=True)
def post_accept(self, forum, post):
@@ -512,7 +512,7 @@ class WebsiteForum(http.Controller):
'reasons': offensive_reasons,
'offensive': True,
})
return request.website.render("website_forum.close_post", values)
return request.render("website_forum.close_post", values)
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/mark_as_offensive', type='http', auth="user", methods=["POST"], website=True)
def post_mark_as_offensive(self, forum, post, **kwargs):
@@ -550,7 +550,7 @@ class WebsiteForum(http.Controller):
'pager': pager,
})
return request.website.render("website_forum.users", values)
return request.render("website_forum.users", values)
@http.route(['/forum/<model("forum.forum"):forum>/partner/<int:partner_id>'], type='http', auth="public", website=True)
def open_partner(self, forum, partner_id=0, **post):
@@ -674,7 +674,7 @@ class WebsiteForum(http.Controller):
'posts': posts,
'vote_post': vote_ids,
})
return request.website.render("website_forum.user_detail_full", values)
return request.render("website_forum.user_detail_full", values)
@http.route('/forum/<model("forum.forum"):forum>/user/<model("res.users"):user>/edit', type='http', auth="user", website=True)
def edit_profile(self, forum, user, **kwargs):
@@ -685,7 +685,7 @@ class WebsiteForum(http.Controller):
'countries': countries,
'notifications': self._get_notifications(),
})
return request.website.render("website_forum.edit_profile", values)
return request.render("website_forum.edit_profile", values)
@http.route('/forum/<model("forum.forum"):forum>/user/<model("res.users"):user>/save', type='http', auth="user", methods=['POST'], website=True)
def save_edited_profile(self, forum, user, **kwargs):
@@ -714,7 +714,7 @@ class WebsiteForum(http.Controller):
values.update({
'badges': badges,
})
return request.website.render("website_forum.badge", values)
return request.render("website_forum.badge", values)
# Messaging
# --------------------------------------------------
+3 -3
View File
@@ -20,7 +20,7 @@ class WebsiteDoc(http.Controller):
'forum': forum,
'sections': sections,
}
return request.website.render("website_forum_doc.documentation", value)
return request.render("website_forum_doc.documentation", value)
@http.route(['''/forum/how-to/<model("forum.documentation.toc"):toc>/<model("forum.post", "[('documentation_toc_id','=',toc[0])]"):post>'''], type='http', auth="public", website=True)
def post(self, toc, post, **kwargs):
@@ -32,7 +32,7 @@ class WebsiteDoc(http.Controller):
'main_object': post,
'forum': post.forum_id
}
return request.website.render("website_forum_doc.documentation_post", value)
return request.render("website_forum_doc.documentation_post", value)
@http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):post>/promote', type='http', auth="user", website=True)
def post_toc(self, forum, post, **kwargs):
@@ -42,7 +42,7 @@ class WebsiteDoc(http.Controller):
'forum': post.forum_id,
'chapters': request.env['forum.documentation.toc'].search([('child_ids', '=', False)])
}
return request.website.render("website_forum_doc.promote_question", value)
return request.render("website_forum_doc.promote_question", value)
@http.route('/forum/<model("forum.forum"):forum>/promote_ok', type='http', auth="user", website=True)
def post_toc_ok(self, forum, post_id, toc_id, **kwargs):
@@ -56,4 +56,4 @@ class GoogleMap(http.Controller):
'partner_url': partner_url,
'partner_data': json.dumps(partner_data)
}
return request.website.render("website_google_map.google_map", values)
return request.render("website_google_map.google_map", values)
+1 -1
View File
@@ -12,4 +12,4 @@ class WebsiteHr(http.Controller):
if not request.env['res.users'].has_group('base.group_website_publisher'):
employees_domain += [('website_published', '=', True)]
employees = request.env['hr.employee'].search(employees_domain)
return request.website.render("website.aboutus", {'employees': employees})
return request.render("website.aboutus", {'employees': employees})
@@ -58,7 +58,7 @@ class website_hr_recruitment(http.Controller):
office_id = False
# Render page
return request.website.render("website_hr_recruitment.index", {
return request.render("website_hr_recruitment.index", {
'jobs': jobs,
'countries': countries,
'departments': departments,
+2 -2
View File
@@ -14,7 +14,7 @@ class Website_Url(http.Controller):
@http.route('/r', type='http', auth='user', website=True)
def shorten_url(self, **post):
return request.website.render("website_links.page_shorten_url", post)
return request.render("website_links.page_shorten_url", post)
@http.route('/website_links/add_code', type='json', auth='user')
def add_code(self, **post):
@@ -34,6 +34,6 @@ class Website_Url(http.Controller):
code = request.env['link.tracker.code'].search([('code', '=', code)], limit=1)
if code:
return request.website.render("website_links.graphs", code.link_id.read()[0])
return request.render("website_links.graphs", code.link_id.read()[0])
else:
return werkzeug.utils.redirect('', 301)
+2 -2
View File
@@ -13,7 +13,7 @@ class WebsiteLivechat(http.Controller):
values = {
'channels': channels
}
return request.website.render('website_livechat.channel_list_page', values)
return request.render('website_livechat.channel_list_page', values)
@http.route('/livechat/channel/<model("im_livechat.channel"):channel>', type='http', auth='public', website=True)
@@ -34,4 +34,4 @@ class WebsiteLivechat(http.Controller):
'team': channel.sudo().user_ids,
'percentage': percentage
}
return request.website.render("website_livechat.channel_page", values)
return request.render("website_livechat.channel_page", values)
@@ -46,7 +46,7 @@ class MailGroup(http.Controller):
message_data = dict((message['res_id'], message['res_id_count']) for message in messages)
group_data = dict((group.id, {'monthly_message_nbr': message_data.get(group.id, 0)}) for group in groups)
return request.website.render('website_mail_channel.mail_channels', {'groups': groups, 'group_data': group_data})
return request.render('website_mail_channel.mail_channels', {'groups': groups, 'group_data': group_data})
@http.route(["/groups/is_member"], type='json', auth="public", website=True)
def is_member(self, channel_id=0, **kw):
@@ -144,7 +144,7 @@ class MailGroup(http.Controller):
'date_end': date_end,
'replies_per_page': self._replies_per_page,
}
return request.website.render('website_mail_channel.group_messages', values)
return request.render('website_mail_channel.group_messages', values)
@http.route([
'''/groups/<model('mail.channel'):group>/<model('mail.message', "[('model','=','mail.channel'), ('res_id','=',group[0])]"):message>''',
@@ -168,7 +168,7 @@ class MailGroup(http.Controller):
'next_message': next_message,
'prev_message': prev_message,
}
return request.website.render('website_mail_channel.group_message', values)
return request.render('website_mail_channel.group_message', values)
@http.route(
'''/groups/<model('mail.channel'):group>/<model('mail.message', "[('model','=','mail.channel'), ('res_id','=',group[0])]"):message>/get_replies''',
@@ -210,7 +210,7 @@ class MailGroup(http.Controller):
# add partner
channel.sudo().write({'channel_partner_ids': [(4, partner_id)]})
return request.website.render("website_mail_channel.confirmation_subscription", {'subscribing': True})
return request.render("website_mail_channel.confirmation_subscription", {'subscribing': True})
@http.route("/groups/unsubscribe/<model('mail.channel'):channel>/<int:partner_id>/<string:token>", type='http', auth='public', website=True)
def confirm_unsubscribe(self, channel, partner_id, token, **kw):
@@ -226,4 +226,4 @@ class MailGroup(http.Controller):
# remove partner
channel.sudo().write({'channel_partner_ids': [(3, partner_id)]})
return request.website.render("website_mail_channel.confirmation_subscription", {'subscribing': False})
return request.render("website_mail_channel.confirmation_subscription", {'subscribing': False})
@@ -13,13 +13,13 @@ class MassMailController(MassMailController):
if mailing.exists():
if mailing.mailing_model == 'mail.mass_mailing.contact':
contacts = request.env['mail.mass_mailing.contact'].sudo().search([('email', '=', email)])
return request.website.render('website_mass_mailing.page_unsubscribe', {
return request.render('website_mass_mailing.page_unsubscribe', {
'contacts': contacts,
'email': email,
'mailing_id': mailing_id})
else:
super(MassMailController, self).mailing(mailing_id, email=email, res_id=res_id, **post)
return request.website.render('website_mass_mailing.page_unsubscribed')
return request.render('website_mass_mailing.page_unsubscribed')
@http.route(['/mail/mailing/unsubscribe'], type='json', auth='none')
def unsubscribe(self, mailing_id, opt_in_ids, opt_out_ids, email):
@@ -160,7 +160,7 @@ class WebsiteMembership(http.Controller):
'post': post,
'search': "?%s" % werkzeug.url_encode(post),
}
return request.website.render("website_membership.index", values)
return request.render("website_membership.index", values)
# Do not use semantic controller due to SUPERUSER_ID
@http.route(['/members/<partner_id>'], type='http', auth="public", website=True)
@@ -171,5 +171,5 @@ class WebsiteMembership(http.Controller):
if partner.exists() and partner.website_published: # TODO should be done with access rules
values = {}
values['main_object'] = values['partner'] = partner
return request.website.render("website_membership.partner", values)
return request.render("website_membership.partner", values)
return self.members(**post)
+1 -1
View File
@@ -20,5 +20,5 @@ class WebsitePartnerPage(http.Controller):
'partner': partner_sudo,
'edit_page': False
}
return request.website.render("website_partner.partner_page", values)
return request.render("website_partner.partner_page", values)
return request.not_found()
+3 -3
View File
@@ -17,7 +17,7 @@ class website_payment(http.Controller):
}
for acquirer in acquirers:
acquirer.form = acquirer.sudo()._registration_render(request.env.user.partner_id.id, {'error': {}, 'error_message': [], 'return_url': '/my/payment_method', 'json': False, 'bootstrap_formatting': True})
return request.website.render("website_payment.pay_methods", values)
return request.render("website_payment.pay_methods", values)
@http.route(['/website_payment/delete/'], methods=['POST'], type='http', auth="user", website=True)
def delete(self, delete_pm_id=None):
@@ -54,7 +54,7 @@ class website_payment(http.Controller):
'amount': float(amount),
'payment_form': payment_form,
}
return request.website.render('website_payment.pay', values)
return request.render('website_payment.pay', values)
@http.route(['/website_payment/transaction'], type='json', auth="public", website=True)
def transaction(self, reference, amount, currency_id, acquirer_id):
@@ -78,6 +78,6 @@ class website_payment(http.Controller):
tx = request.env['payment.transaction'].browse(tx_id)
status = (tx.state == 'done' and 'success') or 'danger'
message = (tx.state == 'done' and 'Your payment was successful! It may take some time to be validated on our end.') or 'OOps! There was a problem with your payment.'
return request.website.render('website_payment.confirm', {'tx': tx, 'status': status, 'message': message})
return request.render('website_payment.confirm', {'tx': tx, 'status': status, 'message': message})
else:
return request.redirect('/my/home')
+2 -2
View File
@@ -53,7 +53,7 @@ class website_account(http.Controller):
@http.route(['/my', '/my/home'], type='http', auth="public", website=True)
def account(self, **kw):
values = self._prepare_portal_layout_values()
return request.website.render("website_portal.portal_my_home", values)
return request.render("website_portal.portal_my_home", values)
@http.route(['/my/account'], type='http', auth='user', website=True)
def details(self, redirect=None, **post):
@@ -86,7 +86,7 @@ class website_account(http.Controller):
'redirect': redirect,
})
return request.website.render("website_portal.details", values)
return request.render("website_portal.details", values)
def details_form_validate(self, data):
error = dict()
@@ -77,7 +77,7 @@ class website_account(website_account):
'archive_groups': archive_groups,
'default_url': '/my/quotes',
})
return request.website.render("website_portal_sale.portal_my_quotations", values)
return request.render("website_portal_sale.portal_my_quotations", values)
@http.route(['/my/orders', '/my/orders/page/<int:page>'], type='http', auth="user", website=True)
def portal_my_orders(self, page=1, date_begin=None, date_end=None, **kw):
@@ -114,7 +114,7 @@ class website_account(website_account):
'archive_groups': archive_groups,
'default_url': '/my/orders',
})
return request.website.render("website_portal_sale.portal_my_orders", values)
return request.render("website_portal_sale.portal_my_orders", values)
@http.route(['/my/orders/<int:order>'], type='http', auth="user", website=True)
def orders_followup(self, order=None, **kw):
@@ -123,9 +123,9 @@ class website_account(website_account):
order.check_access_rights('read')
order.check_access_rule('read')
except AccessError:
return request.website.render("website.403")
return request.render("website.403")
order_invoice_lines = {il.product_id.id: il.invoice_id for il in order.invoice_ids.mapped('invoice_line_ids')}
return request.website.render("website_portal_sale.orders_followup", {
return request.render("website_portal_sale.orders_followup", {
'order': order.sudo(),
'order_invoice_lines': order_invoice_lines,
})
@@ -168,7 +168,7 @@ class website_account(website_account):
'archive_groups': archive_groups,
'default_url': '/my/invoices',
})
return request.website.render("website_portal_sale.portal_my_invoices", values)
return request.render("website_portal_sale.portal_my_invoices", values)
def details_form_validate(self, data):
error, error_message = super(website_account, self).details_form_validate(data)
+4 -4
View File
@@ -61,11 +61,11 @@ class WebsiteAccount(website_account):
'default_url': '/my/projects',
'pager': pager
})
return request.website.render("website_project.my_projects", values)
return request.render("website_project.my_projects", values)
@http.route(['/my/project/<model("project.project"):project>'], type='http', auth="user", website=True)
def my_project(self, project=None, **kw):
return request.website.render("website_project.my_project", {'project': project})
return request.render("website_project.my_project", {'project': project})
@http.route(['/my/tasks', '/my/tasks/page/<int:page>'], type='http', auth="user", website=True)
def my_tasks(self, page=1, date_begin=None, date_end=None, project=None, sortby=None, **kw):
@@ -123,8 +123,8 @@ class WebsiteAccount(website_account):
'default_url': '/my/tasks',
'pager': pager
})
return request.website.render("website_project.my_tasks", values)
return request.render("website_project.my_tasks", values)
@http.route(['/my/task/<model("project.task"):task>'], type='http', auth="user", website=True)
def my_task(self, task=None, **kw):
return request.website.render("website_project.my_task", {'task': task, 'user': request.env.user})
return request.render("website_project.my_task", {'task': task, 'user': request.env.user})
@@ -75,9 +75,9 @@ class WebsiteAccount(website_account):
'default_url': '/my/issues',
'pager': pager
})
return request.website.render("website_project_issue.my_issues", values)
return request.render("website_project_issue.my_issues", values)
@http.route(['/my/issues/<int:issue_id>'], type='http', auth="user", website=True)
def my_issues_issue(self, issue_id=None, **kw):
issue = request.env['project.issue'].browse(issue_id)
return request.website.render("website_project_issue.my_issues_issue", {'issue': issue})
return request.render("website_project_issue.my_issues_issue", {'issue': issue})
+9 -9
View File
@@ -32,7 +32,7 @@ class sale_quote(http.Controller):
order = request.env['sale.order'].search([('id', '=', order_id)])
if not order:
return request.website.render('website.404')
return request.render('website.404')
dummy, action = request.env['ir.model.data'].get_object_reference('sale', 'action_quotations')
days = 0
@@ -81,16 +81,16 @@ class sale_quote(http.Controller):
'partner_id': order.partner_id.id,
},
context=render_ctx)
return request.website.render('website_quote.so_quotation', values)
return request.render('website_quote.so_quotation', values)
@http.route(['/quote/accept'], type='json', auth="public", website=True)
def accept(self, order_id, token=None, signer=None, sign=None, **post):
order_obj = request.registry.get('sale.order')
order = order_obj.browse(request.cr, SUPERUSER_ID, order_id)
if token != order.access_token:
return request.website.render('website.404')
return request.render('website.404')
if order.require_payment:
return request.website.render('website.404')
return request.render('website.404')
if order.state != 'sent':
return False
attachments=sign and [('signature.png', sign.decode('base64'))] or []
@@ -104,7 +104,7 @@ class sale_quote(http.Controller):
order_obj = request.registry.get('sale.order')
order = order_obj.browse(request.cr, SUPERUSER_ID, order_id)
if token != order.access_token:
return request.website.render('website.404')
return request.render('website.404')
if order.state != 'sent':
return werkzeug.utils.redirect("/quote/%s/%s?message=4" % (order_id, token))
request.registry.get('sale.order').action_cancel(request.cr, SUPERUSER_ID, [order_id])
@@ -117,7 +117,7 @@ class sale_quote(http.Controller):
def update(self, line_id, remove=False, unlink=False, order_id=None, token=None, **post):
order = request.registry.get('sale.order').browse(request.cr, SUPERUSER_ID, int(order_id))
if token != order.access_token:
return request.website.render('website.404')
return request.render('website.404')
if order.state not in ('draft','sent'):
return False
line_id=int(line_id)
@@ -135,16 +135,16 @@ class sale_quote(http.Controller):
@http.route(["/quote/template/<model('sale.quote.template'):quote>"], type='http', auth="user", website=True)
def template_view(self, quote, **post):
values = { 'template': quote }
return request.website.render('website_quote.so_template', values)
return request.render('website_quote.so_template', values)
@http.route(["/quote/add_line/<int:option_id>/<int:order_id>/<token>"], type='http', auth="public", website=True)
def add(self, option_id, order_id, token, **post):
vals = {}
order = request.registry.get('sale.order').browse(request.cr, SUPERUSER_ID, order_id)
if token != order.access_token:
return request.website.render('website.404')
return request.render('website.404')
if order.state not in ['draft', 'sent']:
return request.website.render('website.http_error', {'status_code': 'Forbidden', 'status_message': _('You cannot add options to a confirmed order.')})
return request.render('website.http_error', {'status_code': 'Forbidden', 'status_message': _('You cannot add options to a confirmed order.')})
option_obj = request.registry.get('sale.order.option')
option = option_obj.browse(request.cr, SUPERUSER_ID, option_id)
@@ -12,7 +12,7 @@ class WebsiteRatingProject(http.Controller):
def index(self, **kw):
projects = request.env['project.project'].sudo().search([('rating_status', '!=', 'no'), ('website_published', '=', True)])
values = {'projects': projects}
return request.website.render('website_rating_project_issue.index', values)
return request.render('website_rating_project_issue.index', values)
@http.route(['/project/rating/<int:project_id>'], type='http', auth="public", website=True)
def page(self, project_id=None, **kw):
@@ -27,7 +27,7 @@ class WebsiteRatingProject(http.Controller):
'task_data': self._calculate_rating(project.id, "project.task"),
'issue_data': self._calculate_rating(project.id, "project.issue"),
}
return request.website.render('website_rating_project_issue.project_rating_page', values)
return request.render('website_rating_project_issue.project_rating_page', values)
def _calculate_rating(self, project_id, model_name):
# Calculate rating for Tasks and Issues
+11 -11
View File
@@ -258,7 +258,7 @@ class WebsiteSale(http.Controller):
}
if category:
values['main_object'] = category
return request.website.render("website_sale.products", values)
return request.render("website_sale.products", values)
@http.route(['/shop/product/<model("product.template"):product>'], type='http', auth="public", website=True)
def product(self, product, category='', search='', **kwargs):
@@ -307,7 +307,7 @@ class WebsiteSale(http.Controller):
'rating_message_values': rating_message_values,
'rating_product': rating_product
}
return request.website.render("website_sale.product", values)
return request.render("website_sale.product", values)
@http.route(['/shop/change_pricelist/<model("product.pricelist"):pl_id>'], type='http', auth="public", website=True)
def pricelist_change(self, pl_id, **post):
@@ -347,12 +347,12 @@ class WebsiteSale(http.Controller):
values['suggested_products'] = _order._cart_accessories()
if post.get('type') == 'popover':
return request.website.render("website_sale.cart_popover", values)
return request.render("website_sale.cart_popover", values)
if post.get('code_not_available'):
values['code_not_available'] = post.get('code_not_available')
return request.website.render("website_sale.cart", values)
return request.render("website_sale.cart", values)
@http.route(['/shop/cart/update'], type='http', auth="public", methods=['POST'], website=True, csrf=False)
def cart_update(self, product_id, add_qty=1, set_qty=0, **kw):
@@ -377,7 +377,7 @@ class WebsiteSale(http.Controller):
value['cart_quantity'] = order.cart_quantity
from_currency = order.company_id.currency_id
to_currency = order.pricelist_id.currency_id
value['website_sale.cart_lines'] = request.website._render("website_sale.cart_lines", {
value['website_sale.cart_lines'] = request.env['ir.ui.view'].render_template("website_sale.cart_lines", {
'website_sale_order': order,
'compute_currency': lambda price: from_currency.compute(price, to_currency),
'suggested_products': order.with_context(pricelist=order.pricelist_id.id)._cart_accessories()
@@ -594,7 +594,7 @@ class WebsiteSale(http.Controller):
'error': errors,
'callback': kw.get('callback'),
}
return request.website.render("website_sale.address", render_values)
return request.render("website_sale.address", render_values)
@http.route(['/shop/checkout'], type='http', auth="public", website=True)
def checkout(self, **post):
@@ -612,7 +612,7 @@ class WebsiteSale(http.Controller):
# Avoid useless rendering if called in ajax
if post.get('xhr'):
return 'ok'
return request.website.render("website_sale.checkout", values)
return request.render("website_sale.checkout", values)
@http.route(['/shop/confirm_order'], type='http', auth="public", website=True)
def confirm_order(self, **post):
@@ -665,7 +665,7 @@ class WebsiteSale(http.Controller):
values.update(request.env['sale.order']._get_website_data(order))
return request.website.render("website_sale.extra_info", values)
return request.render("website_sale.extra_info", values)
# ------------------------------------------------------
# Payment
@@ -721,7 +721,7 @@ class WebsiteSale(http.Controller):
acquirer.button = acquirer_button
values['acquirers'].append(acquirer)
return request.website.render("website_sale.payment", values)
return request.render("website_sale.payment", values)
@http.route(['/shop/payment/transaction/<int:acquirer_id>'], type='json', auth="public", website=True)
def payment_transaction(self, acquirer_id):
@@ -808,7 +808,7 @@ class WebsiteSale(http.Controller):
'tx_post_msg': tx.acquirer_id.post_msg or None
})
return {'recall': flag, 'message': request.website._render("website_sale.order_state_message", values)}
return {'recall': flag, 'message': request.env['ir.ui.view'].render_template("website_sale.order_state_message", values)}
@http.route('/shop/payment/validate', type='http', auth="public", website=True)
def payment_validate(self, transaction_id=None, sale_order_id=None, **post):
@@ -859,7 +859,7 @@ class WebsiteSale(http.Controller):
sale_order_id = request.session.get('sale_last_order_id')
if sale_order_id:
order = request.env['sale.order'].sudo().browse(sale_order_id)
return request.website.render("website_sale.confirmation", {'order': order})
return request.render("website_sale.confirmation", {'order': order})
else:
return request.redirect('/shop')
@@ -54,7 +54,7 @@ class WebsiteSaleOptions(WebsiteSale):
to_currency = pricelist.currency_id
compute_currency = lambda price: request.env['res.currency']._compute(from_currency, to_currency, price)
product = request.env['product.product'].with_context(product_context).browse(int(product_id))
return request.website._render("website_sale_options.modal", {
return request.env['ir.ui.view'].render_template("website_sale_options.modal", {
'product': product,
'compute_currency': compute_currency,
'get_attribute_value_ids': self.get_attribute_value_ids,
+8 -8
View File
@@ -56,10 +56,10 @@ class website_slides(http.Controller):
"""
channels = request.env['slide.channel'].search([], order='sequence, id')
if not channels:
return request.website.render("website_slides.channel_not_found")
return request.render("website_slides.channel_not_found")
elif len(channels) == 1:
return request.redirect("/slides/%s" % channels.id)
return request.website.render('website_slides.channels', {
return request.render('website_slides.channels', {
'channels': channels,
'user': request.env.user,
'is_public_user': request.env.user == request.website.user_id
@@ -131,7 +131,7 @@ class website_slides(http.Controller):
}
if search:
values['search'] = search
return request.website.render('website_slides.slides_search', values)
return request.render('website_slides.slides_search', values)
# Display uncategorized slides
if not slide_type and not category:
@@ -147,7 +147,7 @@ class website_slides(http.Controller):
values.update({
'category_datas': category_datas,
})
return request.website.render('website_slides.home', values)
return request.render('website_slides.home', values)
# --------------------------------------------------
# SLIDE.SLIDE CONTOLLERS
@@ -158,7 +158,7 @@ class website_slides(http.Controller):
values = self._get_slide_detail(slide)
if not values.get('private'):
self._set_viewed_slide(slide, 'slide')
return request.website.render('website_slides.slide_detail_view', values)
return request.render('website_slides.slide_detail_view', values)
@http.route('''/slides/slide/<model("slide.slide", "[('channel_id.can_see', '=', True), ('datas', '!=', False), ('slide_type', '=', 'presentation')]"):slide>/pdf_content''', type='http', auth="public", website=True)
def slide_get_pdf_content(self, slide):
@@ -225,7 +225,7 @@ class website_slides(http.Controller):
('Content-Disposition', disposition)])
elif not request.session.uid and slide.download_security == 'user':
return werkzeug.utils.redirect('/web?redirect=/slides/slide/%s' % (slide.id))
return request.website.render("website.403")
return request.render("website.403")
@http.route('''/slides/slide/<model("slide.slide"):slide>/promote''', type='http', auth='user', website=True)
def slide_set_promoted(self, slide):
@@ -344,8 +344,8 @@ class website_slides(http.Controller):
values['is_embedded'] = is_embedded
if not values.get('private'):
self._set_viewed_slide(slide, 'embed')
return request.website.render('website_slides.embed_slide', values)
return request.render('website_slides.embed_slide', values)
except AccessError: # TODO : please, make it clean one day, or find another secure way to detect
# if the slide can be embedded, and properly display the error message.
slide = request.env['slide.slide'].sudo().browse(slide_id)
return request.website.render('website_slides.embed_slide_forbidden', {'slide': slide})
return request.render('website_slides.embed_slide_forbidden', {'slide': slide})