summaryrefslogtreecommitdiff
path: root/addons/web/controllers/main.py
diff options
context:
space:
mode:
authorFabien Meghazi <fme@openerp.com>2012-12-17 12:38:42 +0100
committerFabien Meghazi <fme@openerp.com>2012-12-17 12:38:42 +0100
commitc1e9e6f12e343244f86fbf56bf4e5eb983b334d5 (patch)
tree25b700d47006479c71f36c6231a64619d6715574 /addons/web/controllers/main.py
parenta724c43257252e19a9bb37fca9a01aae0c8bf8f5 (diff)
parentc8b5413f371fde077c872a9b782b7b60394f5e0d (diff)
[MERGE] trunk
bzr revid: fme@openerp.com-20121217113842-j3a013i7xrsb5a69
Diffstat (limited to 'addons/web/controllers/main.py')
-rw-r--r--addons/web/controllers/main.py67
1 files changed, 49 insertions, 18 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index fe23e99a5a1..0d5194829ad 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -28,6 +28,7 @@ except ImportError:
xlwt = None
import openerp
+import openerp.modules.registry
from openerp.tools.translate import _
from .. import http
@@ -169,7 +170,6 @@ def module_installed_bypass_session(dbname):
loadable = openerpweb.addons_manifest.keys()
modules = {}
try:
- import openerp.modules.registry
registry = openerp.modules.registry.RegistryManager.get(dbname)
with registry.cursor() as cr:
m = registry.get('ir.module.module')
@@ -1059,14 +1059,15 @@ class DataSet(openerpweb.Controller):
def _call_kw(self, req, model, method, args, kwargs):
# Temporary implements future display_name special field for model#read()
- if method == 'read' and kwargs.get('context') and kwargs['context'].get('future_display_name'):
+ if method == 'read' and kwargs.get('context', {}).get('future_display_name'):
if 'display_name' in args[1]:
- names = req.session.model(model).name_get(args[0], **kwargs)
+ names = dict(req.session.model(model).name_get(args[0], **kwargs))
args[1].remove('display_name')
- r = getattr(req.session.model(model), method)(*args, **kwargs)
- for i in range(len(r)):
- r[i]['display_name'] = names[i][1] or "%s#%d" % (model, names[i][0])
- return r
+ records = req.session.model(model).read(*args, **kwargs)
+ for record in records:
+ record['display_name'] = \
+ names.get(record['id']) or "%s#%d" % (model, (record['id']))
+ return records
return getattr(req.session.model(model), method)(*args, **kwargs)
@@ -1200,9 +1201,10 @@ class Binary(openerpweb.Controller):
except:
pass
return req.make_response(image_data, headers)
- def placeholder(self, req):
+
+ def placeholder(self, req, image='placeholder.png'):
addons_path = openerpweb.addons_manifest['web']['addons_path']
- return open(os.path.join(addons_path, 'web', 'static', 'src', 'img', 'placeholder.png'), 'rb').read()
+ return open(os.path.join(addons_path, 'web', 'static', 'src', 'img', image), 'rb').read()
@openerpweb.httprequest
def saveas(self, req, model, field, id=None, filename_field=None, **kw):
@@ -1275,11 +1277,11 @@ class Binary(openerpweb.Controller):
@openerpweb.httprequest
def upload(self, req, callback, ufile):
# TODO: might be useful to have a configuration flag for max-length file uploads
+ out = """<script language="javascript" type="text/javascript">
+ var win = window.top.window;
+ win.jQuery(win).trigger(%s, %s);
+ </script>"""
try:
- out = """<script language="javascript" type="text/javascript">
- var win = window.top.window;
- win.jQuery(win).trigger(%s, %s);
- </script>"""
data = ufile.read()
args = [len(data), ufile.filename,
ufile.content_type, base64.b64encode(data)]
@@ -1290,11 +1292,11 @@ class Binary(openerpweb.Controller):
@openerpweb.httprequest
def upload_attachment(self, req, callback, model, id, ufile):
Model = req.session.model('ir.attachment')
+ out = """<script language="javascript" type="text/javascript">
+ var win = window.top.window;
+ win.jQuery(win).trigger(%s, %s);
+ </script>"""
try:
- out = """<script language="javascript" type="text/javascript">
- var win = window.top.window;
- win.jQuery(win).trigger(%s, %s);
- </script>"""
attachment_id = Model.create({
'name': ufile.filename,
'datas': base64.encodestring(ufile.read()),
@@ -1306,10 +1308,39 @@ class Binary(openerpweb.Controller):
'filename': ufile.filename,
'id': attachment_id
}
- except Exception,e:
+ except xmlrpclib.Fault, e:
args = {'error':e.faultCode }
return out % (simplejson.dumps(callback), simplejson.dumps(args))
+ @openerpweb.httprequest
+ def company_logo(self, req, dbname=None):
+ # TODO add etag, refactor to use /image code for etag
+ uid = None
+ if req.session._db:
+ dbname = req.session._db
+ uid = req.session._uid
+ elif dbname is None:
+ dbname = db_monodb(req)
+
+ if uid is None:
+ uid = openerp.SUPERUSER_ID
+
+ if not dbname:
+ image_data = self.placeholder(req, 'logo.png')
+ else:
+ registry = openerp.modules.registry.RegistryManager.get(dbname)
+ with registry.cursor() as cr:
+ user = registry.get('res.users').browse(cr, uid, uid)
+ if user.company_id.logo_web:
+ image_data = user.company_id.logo_web.decode('base64')
+ else:
+ image_data = self.placeholder(req, 'nologo.png')
+ headers = [
+ ('Content-Type', 'image/png'),
+ ('Content-Length', len(image_data)),
+ ]
+ return req.make_response(image_data, headers)
+
class Action(openerpweb.Controller):
_cp_path = "/web/action"