diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index e6efda5b16a..e87f87d0f69 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -311,7 +311,7 @@ class Website(Home): } return request.render("website.list_website_pages", values) - @http.route(['/website/add/', '/website/add/'], type='http', auth="user", website=True) + @http.route(['/website/add/', '/website/add/'], type='http', auth="user", website=True, methods=['POST']) def pagenew(self, path="", noredirect=False, add_menu=False, template=False, **kwargs): # for supported mimetype, get correct default template _, ext = os.path.splitext(path) diff --git a/addons/website/static/src/js/menu/new_content.js b/addons/website/static/src/js/menu/new_content.js index efb1b428134..1d6fdfce77e 100644 --- a/addons/website/static/src/js/menu/new_content.js +++ b/addons/website/static/src/js/menu/new_content.js @@ -94,8 +94,9 @@ var NewContentMenu = websiteNavbarData.WebsiteNavbarActionWidget.extend({ return; } var url = '/website/add/' + encodeURIComponent(val); - if ($dialog.find('input[type="checkbox"]').is(':checked')) url +='?add_menu=1'; - document.location = url; + const res = wUtils.sendRequest(url, { + add_menu: $dialog.find('input[type="checkbox"]').is(':checked') || '', + }); return new Promise(function () {}); }); }, diff --git a/addons/website/static/src/js/utils.js b/addons/website/static/src/js/utils.js index 7947eb6f93c..2544f4347fc 100644 --- a/addons/website/static/src/js/utils.js +++ b/addons/website/static/src/js/utils.js @@ -227,11 +227,44 @@ function websiteDomain(self) { return ['|', ['website_id', '=', false], ['website_id', '=', websiteID]]; } +function sendRequest(route, params) { + function _addInput(form, name, value) { + let param = document.createElement('input'); + param.setAttribute('type', 'hidden'); + param.setAttribute('name', name); + param.setAttribute('value', value); + form.appendChild(param); + } + + let form = document.createElement('form'); + form.setAttribute('action', route); + form.setAttribute('method', params.method || 'POST'); + + if (core.csrf_token) { + _addInput(form, 'csrf_token', core.csrf_token); + } + + for (const key in params) { + const value = params[key]; + if (Array.isArray(value) && value.length) { + for (const val of value) { + _addInput(form, key, val); + } + } else { + _addInput(form, key, value); + } + } + + document.body.appendChild(form); + form.submit(); +} + return { loadAnchors: loadAnchors, autocompleteWithPages: autocompleteWithPages, onceAllImagesLoaded: onceAllImagesLoaded, prompt: prompt, + sendRequest: sendRequest, websiteDomain: websiteDomain, }; });