summaryrefslogtreecommitdiff
path: root/addons/website
diff options
context:
space:
mode:
Diffstat (limited to 'addons/website')
-rw-r--r--addons/website/controllers/main.py39
-rw-r--r--addons/website/models/website.py37
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'