105 lines
4.1 KiB
Python
105 lines
4.1 KiB
Python
# Copyright 2015-2018,2020 Ivan Yelizariev <https://it-projects.info/team/yelizariev>
|
|
# Copyright 2016 Stanislav Krotov <https://it-projects.info/team/ufaks>
|
|
# Copyright 2017 Ilmir Karamov <https://it-projects.info/team/ilmir-k>
|
|
# Copyright 2017 Nicolas JEUDY <https://github.com/njeudy>
|
|
# Copyright 2017 Ildar Nasyrov <https://it-projects.info/team/iledarn>
|
|
# Copyright 2018 Kolushov Alexandr <https://it-projects.info/team/KolushovAlexandr>
|
|
# License MIT (https://opensource.org/licenses/MIT).
|
|
# License OPL-1 (https://www.odoo.com/documentation/user/14.0/legal/licenses/licenses.html#odoo-apps) for derivative work.
|
|
|
|
import base64
|
|
import functools
|
|
import io
|
|
|
|
try:
|
|
from werkzeug.utils import send_file
|
|
except ImportError:
|
|
from odoo.tools._vendor.send_file import send_file
|
|
|
|
import odoo
|
|
from odoo import http
|
|
from odoo.http import request
|
|
from odoo.tools.mimetypes import guess_mimetype
|
|
|
|
from odoo.addons.web.controllers.binary import Binary
|
|
|
|
|
|
class BinaryCustom(Binary):
|
|
@http.route(
|
|
["/web/binary/company_logo", "/logo", "/logo.png"], type="http", auth="none"
|
|
)
|
|
def company_logo(self, dbname=None, **kw):
|
|
imgname = "logo"
|
|
imgext = ".png"
|
|
|
|
default_logo_module = "web_debranding"
|
|
if request.session.db:
|
|
default_logo_module = (
|
|
request.env["ir.config_parameter"]
|
|
.sudo()
|
|
.get_param("web_debranding.default_logo_module")
|
|
)
|
|
|
|
placeholder = functools.partial(
|
|
lambda module, *args: os.path.join(
|
|
odoo.modules.module.get_module_path(module), *args
|
|
),
|
|
default_logo_module, "static", "img"
|
|
)
|
|
dbname = request.db
|
|
uid = (request.session.uid if dbname else None) or odoo.SUPERUSER_ID
|
|
|
|
if not dbname:
|
|
response = http.Stream.from_path(
|
|
placeholder(imgname + imgext)
|
|
).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],
|
|
)
|
|
else:
|
|
response = http.Stream.from_path(
|
|
placeholder("nologo.png")
|
|
).get_response()
|
|
except Exception:
|
|
response = http.Stream.from_path(
|
|
placeholder(imgname + imgext)
|
|
).get_response()
|
|
|
|
return response
|