diff --git a/addons/http_routing/models/ir_http.py b/addons/http_routing/models/ir_http.py index c95d86509fd..eb400c356cf 100644 --- a/addons/http_routing/models/ir_http.py +++ b/addons/http_routing/models/ir_http.py @@ -29,15 +29,17 @@ odoo._geoip_resolver = None # Slug API # ------------------------------------------------------------ -def _guess_mimetype(ext=False, default='text/html'): +def _guess_mimetype(ext=False, default=False): exts = { - '.css': 'text/css', - '.less': 'text/less', - '.js': 'text/javascript', - '.xml': 'text/xml', - '.csv': 'text/csv', - '.html': 'text/html', + '.css': ['text/css', 'website.default_css'], + '.less': ['text/less', 'website.default_less'], + '.js': ['text/javascript', 'website.default_javascript'], + '.xml': ['text/xml', 'website.default_xml'], + '.csv': ['text/csv', 'website.default_csv'], + '.html': ['text/html', False], } + if not default: + default = exts['.html'] return ext is not False and exts.get(ext, default) or exts diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index c2c3314f967..165add1feb5 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -3,6 +3,7 @@ import base64 import datetime import json +import os import logging import requests import werkzeug.utils @@ -16,7 +17,7 @@ import odoo from odoo import http, models, fields, _ from odoo.http import request from odoo.tools import pycompat, OrderedSet -from odoo.addons.http_routing.models.ir_http import slug +from odoo.addons.http_routing.models.ir_http import slug, _guess_mimetype from odoo.addons.web.controllers.main import WebClient, Binary, Home from odoo.addons.portal.controllers.portal import pager as portal_pager @@ -245,10 +246,20 @@ class Website(Home): @http.route(['/website/add/', '/website/add/'], type='http', auth="user", website=True) def pagenew(self, path="", noredirect=False, add_menu=False, template=False): + # for supported mimetype, get correct default template + _, ext = os.path.splitext(path) + mimetype_template = _guess_mimetype(ext)[1] + if not template: + template = mimetype_template + template = template and dict(template=template) or {} - url = request.env['website'].new_page(path, add_menu=add_menu, **template) + page = request.env['website'].new_page(path, add_menu=add_menu, **template) + url = page['url'] if noredirect: return werkzeug.wrappers.Response(url, mimetype='text/plain') + + if ext and ext != '.html': # redirect non html pages to backend to edit + return werkzeug.utils.redirect('/web#id=' + str(page.get('view_id')) + '&view_type=form&model=ir.ui.view') return werkzeug.utils.redirect(url + "?enable_editor=1") @http.route(['/website/snippets'], type='json', auth="user", website=True) diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 433fc5e297a..7cb7a7ac4fb 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -116,7 +116,7 @@ class Http(models.AbstractModel): # 'path': req_page[1:], 'deletable': True, 'main_object': mypage, - }, mimetype=_guess_mimetype(ext)) + }, mimetype=_guess_mimetype(ext)[0]) return False @classmethod diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 629462b7c58..7ce6bb30ad9 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -97,7 +97,6 @@ class Website(models.Model): :param template : potential xml_id of the page to create :param namespace : module part of the xml_id if none, the template module name is used """ - if namespace: template_module = namespace else: @@ -105,6 +104,7 @@ class Website(models.Model): # completely arbitrary max_length page_url = '/' + slugify(name, max_length=200, path=True) page_key = self.get_unique_path(slugify(name, 50)) + result = dict({'url': page_url, 'view_id': False}) if not name: name = 'Home' @@ -125,6 +125,7 @@ class Website(models.Model): 'website_ids': [(6, None, [self.get_current_website().id])], 'view_id': view.id }) + result['view_id'] = view.id if add_menu: self.env['website.menu'].create({ 'name': name, @@ -133,7 +134,7 @@ class Website(models.Model): 'page_id': page.id, 'website_id': self.get_current_website().id, }) - return page_url + return result def get_unique_path(self, page_url): """ Given an url, return that url suffixed by counter if it already exists diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index 277a273ba15..70581a3524e 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -534,6 +534,34 @@ + + + + + +