summaryrefslogtreecommitdiff
path: root/addons/web/controllers/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web/controllers/main.py')
-rw-r--r--addons/web/controllers/main.py48
1 files changed, 23 insertions, 25 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 8683ef177bc..1bcdb7f54a9 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -32,6 +32,7 @@ except ImportError:
import openerp
import openerp.modules.registry
from openerp.tools.translate import _
+from openerp.tools import config
from .. import http
openerpweb = http
@@ -86,9 +87,9 @@ def rjsmin(script):
).strip()
return result
-def db_list():
+def db_list(force=False):
proxy = req.session.proxy("db")
- dbs = proxy.list()
+ dbs = proxy.list(force)
h = req.httprequest.environ['HTTP_HOST'].split(':')[0]
d = h.split('.')[0]
r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d)
@@ -104,25 +105,21 @@ def db_monodb_redirect():
if db_url:
return (db_url, False)
- try:
- dbs = db_list()
- except Exception:
- # ignore access denied
- dbs = []
+ dbs = db_list(True)
# 2 use the database from the cookie if it's listable and still listed
cookie_db = req.httprequest.cookies.get('last_used_database')
if cookie_db in dbs:
db = cookie_db
- # 3 use the first db
- if dbs and not db:
+ # 3 use the first db if user can list databases
+ if dbs and not db and (config['list_db'] or len(dbs) == 1):
db = dbs[0]
# redirect to the chosen db if multiple are available
if db and len(dbs) > 1:
query = dict(urlparse.parse_qsl(req.httprequest.query_string, keep_blank_values=True))
- query.update({ 'db': db })
+ query.update({'db': db})
redirect = req.httprequest.path + '?' + urllib.urlencode(query)
return (db, redirect)
@@ -283,8 +280,9 @@ def concat_files(file_list, reader=None, intersperse=""):
if reader is None:
def reader(f):
- with open(f, 'rb') as fp:
- return fp.read()
+ import codecs
+ with codecs.open(f, 'rb', "utf-8-sig") as fp:
+ return fp.read().encode("utf-8")
files_content = []
for fname in file_list:
@@ -766,7 +764,14 @@ class Database(openerpweb.Controller):
@openerpweb.jsonrequest
def get_list(self):
- return db_list()
+ # TODO change js to avoid calling this method if in monodb mode
+ try:
+ return db_list()
+ except openerp.exceptions.AccessDenied:
+ monodb = db_monodb(req)
+ if monodb:
+ return [monodb]
+ raise
@openerpweb.jsonrequest
def create(self, fields):
@@ -781,20 +786,11 @@ class Database(openerpweb.Controller):
@openerpweb.jsonrequest
def duplicate(self, fields):
params = dict(map(operator.itemgetter('name', 'value'), fields))
- return req.session.proxy("db").duplicate_database(
- params['super_admin_pwd'],
- params['db_original_name'],
- params['db_name'])
-
- @openerpweb.jsonrequest
- def duplicate(self, fields):
- params = dict(map(operator.itemgetter('name', 'value'), fields))
duplicate_attrs = (
params['super_admin_pwd'],
params['db_original_name'],
params['db_name'],
)
-
return req.session.proxy("db").duplicate_database(*duplicate_attrs)
@openerpweb.jsonrequest
@@ -802,9 +798,9 @@ class Database(openerpweb.Controller):
password, db = operator.itemgetter(
'drop_pwd', 'drop_db')(
dict(map(operator.itemgetter('name', 'value'), fields)))
-
+
try:
- return req.session.proxy("db").drop(password, db)
+ if req.session.proxy("db").drop(password, db):return True
except openerp.exceptions.AccessDenied:
return {'error': 'AccessDenied', 'title': 'Drop Database'}
except Exception:
@@ -1380,7 +1376,7 @@ class Binary(openerpweb.Controller):
else:
try:
# create an empty registry
- registry = openerp.modules.registry.Registry(dbname.lower())
+ registry = openerp.modules.registry.Registry(dbname)
with registry.cursor() as cr:
cr.execute("""SELECT c.logo_web
FROM res_users u
@@ -1490,6 +1486,8 @@ class Export(openerpweb.Controller):
if all(dict(attrs).get('readonly', True)
for attrs in field.get('states', {}).values()):
continue
+ if not field.get('exportable', True):
+ continue
id = prefix + (prefix and '/'or '') + field_name
name = parent_name + (parent_name and '/' or '') + field['string']