diff options
| author | Jeremy Kersten <jke@odoo.com> | 2015-04-07 17:50:29 +0200 |
|---|---|---|
| committer | Jeremy Kersten <jke@odoo.com> | 2015-04-08 13:40:11 +0200 |
| commit | 4aa2e52b3dfc913a41f7c5f1d8d1c8028f1995c2 (patch) | |
| tree | 46a041e119d4312ec0636a691a8a72b87b02a49a /addons | |
| parent | d1056939ad1f3cae70813780a4c084adfd609a89 (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>.
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/website/models/website.py | 32 | ||||
| -rw-r--r-- | addons/website/static/src/js/website.contentMenu.js | 36 | ||||
| -rw-r--r-- | addons/website/static/src/js/website.js | 2 | ||||
| -rw-r--r-- | addons/website/static/src/xml/website.xml | 170 | ||||
| -rw-r--r-- | addons/website/views/website_backend_navbar.xml | 1 |
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> |
