88 lines
3.3 KiB
Python
88 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import odoo
|
|
import odoo.modules.registry
|
|
from odoo.tools.translate import _
|
|
from odoo.exceptions import AccessError
|
|
from odoo.addons.web.controllers.home import Home, SIGN_UP_REQUEST_PARAMS
|
|
from odoo.addons.web.controllers.utils import ensure_db, is_user_internal
|
|
from odoo import http
|
|
from odoo.http import request
|
|
from odoo.modules import get_resource_path
|
|
from odoo.tools.mimetypes import guess_mimetype
|
|
from odoo.tools import file_open, file_path, replace_exceptions
|
|
|
|
try:
|
|
from werkzeug.utils import send_file
|
|
except ImportError:
|
|
from odoo.tools._vendor.send_file import send_file
|
|
|
|
import json
|
|
import base64
|
|
import functools
|
|
import io
|
|
import os
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
|
|
|
|
|
|
class AwesomeHome(Home):
|
|
'''
|
|
inherit home to extend web.login style
|
|
'''
|
|
@http.route([
|
|
'/web/binary/company_small_logo',
|
|
'/logo_small',
|
|
'/logo_small.png',
|
|
], type='http', auth="none", cors="*")
|
|
def company_logo(self, dbname=None, **kw):
|
|
imgname = 'logo'
|
|
imgext = '.png'
|
|
dbname = request.db
|
|
uid = (request.session.uid if dbname else None) or odoo.SUPERUSER_ID
|
|
|
|
if not dbname:
|
|
response = http.Stream.from_path(file_path('web/static/img/logo.png')).get_response()
|
|
else:
|
|
try:
|
|
# create an empty registry
|
|
registry = odoo.modules.registry.Registry(dbname)
|
|
with registry.cursor() as cr:
|
|
company = int(kw['company']) if kw and kw.get('company') else False
|
|
if company:
|
|
cr.execute("""SELECT logo_web, write_date
|
|
FROM res_company
|
|
WHERE id = %s
|
|
""", (company,))
|
|
else:
|
|
cr.execute("""SELECT c.logo_web, c.write_date
|
|
FROM res_users u
|
|
LEFT JOIN res_company c
|
|
ON c.id = u.company_id
|
|
WHERE u.id = %s
|
|
""", (uid,))
|
|
row = cr.fetchone()
|
|
if row and row[0]:
|
|
image_base64 = base64.b64decode(row[0])
|
|
image_data = io.BytesIO(image_base64)
|
|
mimetype = guess_mimetype(image_base64, default='image/png')
|
|
imgext = '.' + mimetype.split('/')[1]
|
|
if imgext == '.svg+xml':
|
|
imgext = '.svg'
|
|
response = send_file(
|
|
image_data,
|
|
request.httprequest.environ,
|
|
download_name=imgname + imgext,
|
|
mimetype=mimetype,
|
|
last_modified=row[1],
|
|
response_class=Response,
|
|
)
|
|
else:
|
|
response = http.Stream.from_path(file_path('web/static/img/nologo.png')).get_response()
|
|
except Exception:
|
|
response = http.Stream.from_path(file_path(f'web/static/img/{imgname}{imgext}')).get_response()
|
|
|
|
return response |