diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 2c1a373d586..d18f720e20e 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -224,19 +224,43 @@ class website(osv.osv): }) return page_xmlid - def delete_page(self, cr, uid, view_id, context=None): - if context is None: - context = {} + def key_to_view_id(self, cr, uid, view_id, context=None): View = self.pool.get('ir.ui.view') - view_find = View.search(cr, uid, [ + return View.search(cr, uid, [ ('id', '=', view_id), "|", ('website_id', '=', context.get('website_id')), ('website_id', '=', False), ('page', '=', True), ('type', '=', 'qweb') ], context=context) + + def delete_page(self, cr, uid, view_id, context=None): + if context is None: + context = {} + View = self.pool.get('ir.ui.view') + view_find = self.key_to_view_id(cr, uid, view_id, context=context) if view_find: View.unlink(cr, uid, view_find, context=context) + def rename_page(self, cr, uid, view_id, new_name, context=None): + if context is None: + context = {} + View = self.pool.get('ir.ui.view') + view_find = self.key_to_view_id(cr, uid, view_id, context=context) + if view_find: + v = View.browse(cr, uid, view_find, context=context) + + new_name = slugify(new_name, max_length=50) + # Prefix by module if not already done by end user + prefix = v.key.split('.')[0] + if not new_name.startswith(prefix): + new_name = "%s.%s" % (prefix, new_name) + + View.write(cr, uid, view_find, { + 'key': new_name, + 'arch_db': v.arch_db.replace(v.key, new_name, 1) + }) + return new_name + def page_search_dependencies(self, cr, uid, view_id=False, context=None): dep = {} if not view_id: diff --git a/addons/website/static/src/js/website.contentMenu.js b/addons/website/static/src/js/website.contentMenu.js index ab85c061a12..9d646896d9e 100644 --- a/addons/website/static/src/js/website.contentMenu.js +++ b/addons/website/static/src/js/website.contentMenu.js @@ -70,6 +70,40 @@ } }); }, + rename_page: function() { + var self = this; + var context = website.get_context(); + self.mo_id = self.getMainObject().id; + + openerp.jsonRpc('/web/dataset/call_kw', 'call', { + model: 'website', + method: 'page_search_dependencies', + args: [self.mo_id], + kwargs: { + context: context + }, + }).then(function (deps) { + website.prompt({ + id: "editor_rename_page", + window_title: _t("Rename Page"), + dependencies: deps, + }, 'website.rename_page').then(function (val, field, $dialog) { + openerp.jsonRpc('/web/dataset/call_kw', 'call', { + model: 'website', + method: 'rename_page', + args: [ + self.mo_id, + val, + ], + kwargs: { + context: context + }, + }).then(function (new_name) { + window.location = "/page/" + encodeURIComponent(new_name); + }); + }); + }); + }, delete_page: function() { var self = this; var context = website.get_context(); @@ -87,7 +121,9 @@ id: "editor_delete_page", window_title: _t("Delete Page"), dependencies: deps, + init: function() { $('.btn-continue').prop("disabled", true)}, }, 'website.delete_page').then(function (val, field, $dialog) { + if ($dialog.find('input[type="checkbox"]').is(':checked')){ openerp.jsonRpc('/web/dataset/call_kw', 'call', { model: 'website', diff --git a/addons/website/static/src/js/website.js b/addons/website/static/src/js/website.js index 26a0ce0477e..14a8739c104 100644 --- a/addons/website/static/src/js/website.js +++ b/addons/website/static/src/js/website.js @@ -113,7 +113,7 @@ }, options || {}); var type = _.intersection(Object.keys(options), ['input', 'textarea', 'select']); - type = type.length ? type[0] : 'text'; + type = type.length ? type[0] : 'input'; options.field_type = type; options.field_name = options.field_name || options[type]; diff --git a/addons/website/static/src/xml/website.xml b/addons/website/static/src/xml/website.xml index 29716a0fdba..a6cf26bf3d4 100644 --- a/addons/website/static/src/xml/website.xml +++ b/addons/website/static/src/xml/website.xml @@ -46,94 +46,112 @@ -