2013-11-15 13:26:26 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
2013-11-15 15:48:40 +00:00
|
|
|
import werkzeug.routing
|
2013-11-15 13:26:26 +00:00
|
|
|
import openerp
|
|
|
|
from openerp.osv import orm
|
|
|
|
from openerp.http import request
|
|
|
|
from openerp.addons.base import ir
|
|
|
|
|
|
|
|
from ..utils import slugify
|
|
|
|
|
|
|
|
class ir_http(orm.AbstractModel):
|
|
|
|
_inherit = 'ir.http'
|
|
|
|
|
|
|
|
def _get_converters(self):
|
|
|
|
return dict(
|
|
|
|
super(ir_http, self)._get_converters(),
|
|
|
|
model=ModelConverter,
|
2013-11-15 15:48:40 +00:00
|
|
|
page=PageConverter,
|
2013-11-15 13:26:26 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
def _auth_method_public(self):
|
|
|
|
if not request.session.uid:
|
|
|
|
request.uid = request.registry['website'].get_public_user(
|
|
|
|
request.cr, openerp.SUPERUSER_ID, request.context).id
|
|
|
|
else:
|
|
|
|
request.uid = request.session.uid
|
|
|
|
|
|
|
|
|
|
|
|
class ModelConverter(ir.ir_http.ModelConverter):
|
|
|
|
def __init__(self, url_map, model=False):
|
|
|
|
super(ModelConverter, self).__init__(url_map, model)
|
2013-11-19 11:32:05 +00:00
|
|
|
self.regex = r'(?:[A-Za-z0-9-_]+?-)?(\d+)(?=$|/)'
|
2013-11-15 13:26:26 +00:00
|
|
|
|
|
|
|
def to_url(self, value):
|
2013-11-19 10:21:17 +00:00
|
|
|
if isinstance(value, orm.browse_record):
|
|
|
|
[(id, name)] = value.name_get()
|
|
|
|
else:
|
|
|
|
# assume name_search result tuple
|
|
|
|
id, name = value
|
|
|
|
return "%s-%d" % (slugify(name), id)
|
2013-11-15 13:26:26 +00:00
|
|
|
|
2013-11-25 10:08:13 +00:00
|
|
|
def generate(self, cr, uid, query=None, context=None):
|
2013-11-19 10:21:17 +00:00
|
|
|
return request.registry[self.model].name_search(
|
2013-11-25 10:08:13 +00:00
|
|
|
cr, uid, name=query or '', context=context)
|
2013-11-15 15:48:40 +00:00
|
|
|
|
|
|
|
class PageConverter(werkzeug.routing.PathConverter):
|
|
|
|
""" Only point of this converter is to bundle pages enumeration logic
|
|
|
|
|
|
|
|
Sads got: no way to get the view's human-readable name even if one exists
|
|
|
|
"""
|
2013-11-25 10:08:13 +00:00
|
|
|
def generate(self, cr, uid, query=None, context=None):
|
2013-11-15 15:48:40 +00:00
|
|
|
View = request.registry['ir.ui.view']
|
|
|
|
views = View.search_read(
|
2013-11-25 10:08:13 +00:00
|
|
|
cr, uid, [['page', '=', True]],
|
|
|
|
fields=[], order='name', context=context)
|
2013-11-15 15:48:40 +00:00
|
|
|
xids = View.get_external_id(
|
2013-11-25 10:08:13 +00:00
|
|
|
cr, uid, [view['id'] for view in views], context=context)
|
2013-11-15 15:48:40 +00:00
|
|
|
|
|
|
|
for view in views:
|
|
|
|
xid = xids[view['id']]
|
2013-11-19 10:21:17 +00:00
|
|
|
if xid and (not query or query in xid):
|
2013-11-15 15:48:40 +00:00
|
|
|
yield xid
|