diff options
Diffstat (limited to 'addons/website')
| -rw-r--r-- | addons/website/controllers/main.py | 39 | ||||
| -rw-r--r-- | addons/website/models/website.py | 37 |
2 files changed, 40 insertions, 36 deletions
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 6b11c065552..9a9bffe332e 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -48,42 +48,9 @@ class Website(openerp.addons.web.controllers.main.Home): @website.route('/pagenew/<path:path>', type='http', auth="user") def pagenew(self, path, noredirect=NOPE): - module = 'website' - # completely arbitrary max_length - idname = slugify(path, max_length=50) - - request.cr.execute('SAVEPOINT pagenew') - imd = request.registry['ir.model.data'] - view = request.registry['ir.ui.view'] - view_model, view_id = imd.get_object_reference( - request.cr, request.uid, 'website', 'default_page') - newview_id = view.copy( - request.cr, request.uid, view_id, context=request.context) - newview = view.browse( - request.cr, request.uid, newview_id, context=request.context) - newview.write({ - 'arch': newview.arch.replace("website.default_page", - "%s.%s" % (module, idname)), - 'name': path, - 'page': True, - }) - # Fuck it, we're doing it live - try: - imd.create(request.cr, request.uid, { - 'name': idname, - 'module': module, - 'model': 'ir.ui.view', - 'res_id': newview_id, - 'noupdate': True - }, context=request.context) - except psycopg2.IntegrityError: - logger.exception('Unable to create ir_model_data for page %s', path) - request.cr.execute('ROLLBACK TO SAVEPOINT pagenew') - return werkzeug.exceptions.InternalServerError() - else: - request.cr.execute('RELEASE SAVEPOINT pagenew') - - url = "/page/%s" % idname + web = request.registry['website'] + path = web.new_page(request.cr, request.uid, path, request.context) + url = "/page/" + path if noredirect is not NOPE: return werkzeug.wrappers.Response(url, mimetype='text/plain') return werkzeug.utils.redirect(url) diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 735c1ae06c4..2a4beeeb598 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -21,6 +21,7 @@ from openerp.tools.safe_eval import safe_eval from openerp.addons.web import http from openerp.addons.web.http import request, LazyResponse +from ..utils import slugify logger = logging.getLogger(__name__) @@ -117,6 +118,41 @@ class website(osv.osv): } public_user = None + def new_page(self, cr, uid, name, template='website.default_page', ispage=True, context=None): + context=context or {} + # completely arbitrary max_length + idname = slugify(name, max_length=50) + + cr.execute('SAVEPOINT pagenew') + imd = self.pool.get('ir.model.data') + view = self.pool.get('ir.ui.view') + + module, tmp_page = template.split('.') + view_model, view_id = imd.get_object_reference(cr, uid, tmp_mod, tmp_page) + + newview_id = view.copy(cr, uid, view_id, context=context) + newview = view.browse(cr, uid, newview_id, context=context) + newview.write({ + 'arch': newview.arch.replace(template, "%s.%s" % (module, idname)), + 'name': name, + 'page': ispage, + }) + # Fuck it, we're doing it live + try: + imd.create(cr, uid, { + 'name': idname, + 'module': module, + 'model': 'ir.ui.view', + 'res_id': newview_id, + 'noupdate': True + }, context=request.context) + except psycopg2.IntegrityError: + logger.exception('Unable to create ir_model_data for page %s', path) + request.cr.execute('ROLLBACK TO SAVEPOINT pagenew') + return werkzeug.exceptions.InternalServerError() + else: + request.cr.execute('RELEASE SAVEPOINT pagenew') + return "%s.%s" % (module, idname) def get_public_user(self, cr, uid, context=None): if not self.public_user: @@ -508,6 +544,7 @@ class website_menu(osv.osv): _defaults = { 'url': '', 'sequence': 0, + 'new_window': False, } _parent_store = True _parent_order = 'sequence, name' |
