summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Kersten <jke@odoo.com>2015-04-07 17:50:29 +0200
committerJeremy Kersten <jke@odoo.com>2015-04-08 13:40:11 +0200
commit4aa2e52b3dfc913a41f7c5f1d8d1c8028f1995c2 (patch)
tree46a041e119d4312ec0636a691a8a72b87b02a49a
parentd1056939ad1f3cae70813780a4c084adfd609a89 (diff)
[FIX] website: allow to rename a website page.
Code from delete_page has been spliited (functions, templates, ...) to be re-usable by rename_page Change default input type from website.prompt. Old default value 'text' had no sense, there are no tag <text>.
-rw-r--r--addons/website/models/website.py32
-rw-r--r--addons/website/static/src/js/website.contentMenu.js36
-rw-r--r--addons/website/static/src/js/website.js2
-rw-r--r--addons/website/static/src/xml/website.xml170
-rw-r--r--addons/website/views/website_backend_navbar.xml1
5 files changed, 160 insertions, 81 deletions
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 @@
</t>
<t t-name="website.prompt">
+ <t t-call="website.modal_base">
+ <form class="form-horizontal" role="form" t-att-id="id">
+ <div class="form-group mb0">
+ <label for="page-name" class="col-sm-3 control-label">
+ <t t-esc="field_name"/>:
+ </label>
+ <div class="col-sm-9">
+ <input t-if="field_type == 'input'" type="text" class="form-control" required="required"/>
+ <textarea t-if="field_type == 'textarea'" class="form-control" required="required" rows="5"></textarea>
+ <select t-if="field_type == 'select'" class="form-control"></select>
+ </div>
+ </div>
+ </form>
+ </t>
+ </t>
+
+ <t t-name="website.modal_base">
<div class="modal" tabindex="-1" role="dialog" aria-hidden="true">
- <div class="modal-dialog">
+ <div class="modal-dialog">
<div class="modal-content">
- <div class="modal-header" t-if="window_title">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h3 class="modal-title"><t t-esc="window_title"/></h3>
- </div>
+ <t t-call="website.modal_header" />
<div class="modal-body">
- <form class="form-horizontal" role="form" t-att-id="id">
- <div class="form-group mb0">
- <label for="page-name" class="col-sm-3 control-label">
- <t t-esc="field_name"/>:
- </label>
- <div class="col-sm-9">
- <input t-if="field_type == 'input'" type="text" class="form-control" required="required"/>
- <textarea t-if="field_type == 'textarea'" class="form-control" required="required" rows="5"></textarea>
- <select t-if="field_type == 'select'" class="form-control"></select>
- </div>
- </div>
- </form>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-primary">Continue</button>
- <button type="button" class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
+ <t t-raw="0"/>
</div>
+ <t t-call="website.modal_footer" />
</div>
</div>
</div>
</t>
+ <t t-name="website.modal_header">
+ <div class="modal-header" t-if="window_title">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
+ <h3 class="modal-title"><t t-esc="window_title"/></h3>
+ </div>
+ </t>
- <t t-name="website.delete_page">
- <div class="modal" tabindex="-1" role="dialog" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header" t-if="window_title">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h3 class="modal-title"><t t-esc="window_title"/></h3>
- </div>
- <div class="modal-body">
- <div class="alert alert-warning alert-dismissible fade in mt16" role="alert">
- <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
- <strong>Be careful !</strong> Some dependencies can exist ...
- </div>
- <t t-if="dependencies">
- <t t-set='tid' t-value='0'/>
- <t t-foreach="_.keys(dependencies)" t-as="type">
- <div class="panel-group" role="tablist">
- <div class="panel panel-default">
- <div class="panel-heading" role="tab" >
- <h4 class="panel-title">
- <a class="collapsed" data-toggle="collapse" t-att-href="'#collapseDependencies'+tid" aria-expanded="false" t-att-aria-controls="'collapseDependencies'+tid">
- <t t-esc="type"/>
- </a>
- </h4>
- </div>
- <div t-att-id="'collapseDependencies'+tid" class="panel-collapse collapse in" role="tabpanel" aria-expanded="false" >
- <ul class="list-group">
- <t t-foreach="dependencies[type]" t-as="error">
- <li class="list-group-item">
- <i class='fa fa-share fa-flip-vertical'/>
- <a t-if="!_.contains(['', '#', false,], error.link)" t-att-href="error.link">
- <t t-raw="error.text"/>
- </a>
- <t t-if="_.contains(['', '#', false,], error.link)" t-raw="error.text"/>
- </li>
- </t>
- </ul>
- <div class="panel-footer">Reference(s) found: <t t-esc="dependencies[type].length"/></div>
- </div>
- </div>
- </div>
- <t t-set='tid' t-value='tid+1'/>
+ <t t-name="website.modal_footer">
+ <div class="modal-footer">
+ <button type="button" class="btn btn-primary btn-continue">Continue</button>
+ <button type="button" class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
+ </div>
+ </t>
+
+ <t t-name="website.dependencies">
+ <div class="alert alert-warning alert-dismissible fade in mt16" role="alert">
+ <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
+ <strong>Be careful !</strong> Some dependencies can exist ...
+ </div>
+ <t t-if="dependencies">
+ <t t-set='tid' t-value='0'/>
+ <t t-foreach="_.keys(dependencies)" t-as="type">
+ <div class="panel-group" role="tablist">
+ <div class="panel panel-default">
+ <div class="panel-heading" role="tab" >
+ <h4 class="panel-title">
+ <a class="collapsed" data-toggle="collapse" t-att-href="'#collapseDependencies'+tid" aria-expanded="false" t-att-aria-controls="'collapseDependencies'+tid">
+ <t t-esc="type"/>
+ </a>
+ </h4>
+ </div>
+ <div t-att-id="'collapseDependencies'+tid" class="panel-collapse collapse in" role="tabpanel" aria-expanded="false" >
+ <ul class="list-group">
+ <t t-foreach="dependencies[type]" t-as="error">
+ <li class="list-group-item">
+ <i class='fa fa-share fa-flip-vertical'/>
+ <a t-if="!_.contains(['', '#', false,], error.link)" t-att-href="error.link">
+ <t t-raw="error.text"/>
+ </a>
+ <t t-if="_.contains(['', '#', false,], error.link)" t-raw="error.text"/>
+ </li>
</t>
- </t>
- <form class="form-horizontal" role="form" t-att-id="id">
- <div class="form-group">
- <label class="col-sm-offset-2 col-sm-8 text-left alert alert-danger">
- <input type="checkbox" onchange="$('.btn-continue').prop('disabled', !this.checked)"/> I'm sure, I want to delete this page definitively
- </label>
- </div>
- </form>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-primary btn-continue" disabled="disabled">Continue</button>
- <button type="button" class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
+ </ul>
+ <div class="panel-footer">Reference(s) found: <t t-esc="dependencies[type].length"/></div>
+ </div>
</div>
</div>
+ <t t-set='tid' t-value='tid+1'/>
+ </t>
+ </t>
+ </t>
+ <t t-name="website.delete_page">
+ <t t-call="website.modal_base">
+ <t t-call="website.dependencies" />
+ <form class="form-horizontal" role="form" t-att-id="id">
+ <div class="form-group">
+ <label class="col-sm-offset-2 col-sm-8 text-left alert alert-danger">
+ <input type="checkbox" onchange="$('.btn-continue').prop('disabled', !this.checked)"/> I'm sure, I want to delete this page definitively
+ </label>
+ </div>
+ </form>
+ </t>
+ </t>
+
+ <t t-name="website.rename_page">
+ <t t-call="website.modal_base">
+ <t t-call="website.dependencies" />
+ <div class="row">
+ <form class="form-horizontal col-sm-offset-2 col-sm-8 alert alert-info" role="form" t-att-id="id">
+ <div class="form-group" >
+ <label for="new_name" class="control-label col-sm-4">New name</label>
+ <div class="col-sm-8">
+ <input type="text" class="form-control" id="new_name" placeholder="New Name" />
+ </div>
+ </div>
+ </form>
</div>
- </div>
+ </t>
</t>
</templates>
diff --git a/addons/website/views/website_backend_navbar.xml b/addons/website/views/website_backend_navbar.xml
index 7eaa1e89888..7f6b4e5ad9e 100644
--- a/addons/website/views/website_backend_navbar.xml
+++ b/addons/website/views/website_backend_navbar.xml
@@ -53,6 +53,7 @@
<li groups="base.group_website_designer"><a data-action="edit_menu" href="#"><span title="Edit Top Menu">Edit Menu</span></a></li>
<li class="divider" groups="base.group_website_designer"> </li>
<t t-if="deletable">
+ <li groups="base.group_website_designer"><a href="#" data-action="rename_page">Rename Page</a></li>
<li groups="base.group_website_designer"><a href="#" data-action="delete_page">Delete Page</a></li>
<li class="divider" groups="base.group_website_designer"> </li>
</t>