[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>.
This commit is contained in:
Jeremy Kersten
2015-04-08 13:40:11 +02:00
parent d1056939ad
commit 4aa2e52b3d
5 changed files with 166 additions and 87 deletions
+28 -4
View File
@@ -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:
@@ -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',
+1 -1
View File
@@ -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];
+100 -82
View File
@@ -46,94 +46,112 @@
</t>
<t t-name="website.prompt">
<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">
<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-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-content">
<t t-call="website.modal_header" />
<div class="modal-body">
<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>
<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>
</div>
</div>
</div>
<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>
</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>
</t>
</t>
</templates>
@@ -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>