-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by pedrobaeza
- Loading branch information
Showing
18 changed files
with
949 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
==================== | ||
Custom shortcut icon | ||
==================== | ||
|
||
.. | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
!! This file is generated by oca-gen-addon-readme !! | ||
!! changes will be overwritten. !! | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
!! source digest: sha256:d484f6acfd0e0513696306b9fc933198baadece9a848422172ea0b51cf7633c4 | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png | ||
:target: https://odoo-community.org/page/development-status | ||
:alt: Beta | ||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png | ||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html | ||
:alt: License: AGPL-3 | ||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github | ||
:target: https://github.com/OCA/web/tree/18.0/web_favicon | ||
:alt: OCA/web | ||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png | ||
:target: https://translation.odoo-community.org/projects/web-18-0/web-18-0-web_favicon | ||
:alt: Translate me on Weblate | ||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png | ||
:target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=18.0 | ||
:alt: Try me on Runboat | ||
|
||
|badge1| |badge2| |badge3| |badge4| |badge5| | ||
|
||
This module was written to allow you to customize your Odoo instance's | ||
shortcut icon (aka favicon). This is useful for branding purposes, but | ||
also for integrators who have many different Odoo instances running and | ||
need to see at a glance which browser tab does what. | ||
|
||
The icon is shown also for portal users when the website modules are not | ||
installed. | ||
|
||
More info about favicon: https://en.wikipedia.org/wiki/Favicon | ||
|
||
**Table of contents** | ||
|
||
.. contents:: | ||
:local: | ||
|
||
Configuration | ||
============= | ||
|
||
Upload your favicon (16x16, 32x32, 64x64 or "as big as possible") on the | ||
company form. The file format would be ico, gif or png with 16x16, 32x32 | ||
or 64x64 pixels and 16 colors. Highers resolutions or colors support | ||
depends on the used browser, but most modern browsers do. | ||
|
||
Note that most browsers cache favicons basically forever, so if you want | ||
your icon to show up, you'll most probably have to delete you browser | ||
cache. Some browsers can refresh the favicon, accessing the URL | ||
<base_url>/web_favicon/favicon. | ||
|
||
You have a sample SVG that can be used as template for generating your | ||
icon in /static/src/img/master_original_favicon.svg. You can also search | ||
for some favicon generators across the web. | ||
|
||
To allow a user to edit the favicon it has to be member of group | ||
"Administration / Settings". | ||
|
||
Known issues / Roadmap | ||
====================== | ||
|
||
- Allow to upload some big icon (preferrably SVG or the like) and | ||
generate all the icons from it | ||
- Generate icons suitable for mobile devices and web apps (see | ||
/static/src/img/ folder inside the module for a sample of the | ||
possible current formats. | ||
- Put the icon definition at system level, not at company level. It | ||
doesn't make sense (as the icon is cached) to have a different icon | ||
per company. | ||
|
||
Bug Tracker | ||
=========== | ||
|
||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_. | ||
In case of trouble, please check there if your issue has already been reported. | ||
If you spotted it first, help us to smash it by providing a detailed and welcomed | ||
`feedback <https://github.com/OCA/web/issues/new?body=module:%20web_favicon%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. | ||
|
||
Do not contact contributors directly about support or help with technical issues. | ||
|
||
Credits | ||
======= | ||
|
||
Authors | ||
------- | ||
|
||
* Therp BV | ||
* Tecnativa | ||
* OERP Canada | ||
|
||
Contributors | ||
------------ | ||
|
||
- OERP Canada <https://www.oerp.ca/>: | ||
|
||
- Daryl Chen <[email protected]> | ||
|
||
Maintainers | ||
----------- | ||
|
||
This module is maintained by the OCA. | ||
|
||
.. image:: https://odoo-community.org/logo.png | ||
:alt: Odoo Community Association | ||
:target: https://odoo-community.org | ||
|
||
OCA, or the Odoo Community Association, is a nonprofit organization whose | ||
mission is to support the collaborative development of Odoo features and | ||
promote its widespread use. | ||
|
||
This module is part of the `OCA/web <https://github.com/OCA/web/tree/18.0/web_favicon>`_ project on GitHub. | ||
|
||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). | ||
|
||
from . import models |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
# Copyright 2015 Therp BV <http://therp.nl> | ||
# Copyright 2016 Pedro M. Baeza | ||
# Copyright 2024 OERP Canada <https://www.oerp.ca> | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). | ||
|
||
{ | ||
"name": "Custom shortcut icon", | ||
"version": "18.0.1.0.0", | ||
"author": "Therp BV, " | ||
"Tecnativa, " | ||
"OERP Canada," | ||
"Odoo Community Association (OCA)", | ||
"license": "AGPL-3", | ||
"category": "Website", | ||
"summary": "Allows to set a custom shortcut icon (aka favicon)", | ||
"website": "https://github.com/OCA/web", | ||
"depends": [ | ||
"web", | ||
], | ||
"data": ["views/res_company_views.xml", "views/templates.xml"], | ||
"installable": True, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# Translation of Odoo Server. | ||
# This file contains the translation of the following modules: | ||
# * web_favicon | ||
# | ||
msgid "" | ||
msgstr "" | ||
"Project-Id-Version: Odoo Server 17.0\n" | ||
"Report-Msgid-Bugs-To: \n" | ||
"PO-Revision-Date: 2024-04-19 09:35+0000\n" | ||
"Last-Translator: mymage <[email protected]>\n" | ||
"Language-Team: none\n" | ||
"Language: it\n" | ||
"MIME-Version: 1.0\n" | ||
"Content-Type: text/plain; charset=UTF-8\n" | ||
"Content-Transfer-Encoding: \n" | ||
"Plural-Forms: nplurals=2; plural=n != 1;\n" | ||
"X-Generator: Weblate 4.17\n" | ||
|
||
#. module: web_favicon | ||
#: model:ir.model,name:web_favicon.model_res_company | ||
msgid "Companies" | ||
msgstr "Aziende" | ||
|
||
#. module: web_favicon | ||
#: model:ir.model.fields,field_description:web_favicon.field_res_company__favicon | ||
msgid "Company Favicon" | ||
msgstr "Favicon azienda" | ||
|
||
#. module: web_favicon | ||
#: model:ir.model.fields,help:web_favicon.field_res_company__favicon | ||
msgid "" | ||
"This field holds the image used to display favicon for a given company." | ||
msgstr "" | ||
"Questo campo contiene l'immagine utilizzata per visualizzare la favicon per " | ||
"una data azienda." |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# Translation of Odoo Server. | ||
# This file contains the translation of the following modules: | ||
# * web_favicon | ||
# | ||
msgid "" | ||
msgstr "" | ||
"Project-Id-Version: Odoo Server 17.0\n" | ||
"Report-Msgid-Bugs-To: \n" | ||
"Last-Translator: \n" | ||
"Language-Team: \n" | ||
"MIME-Version: 1.0\n" | ||
"Content-Type: text/plain; charset=UTF-8\n" | ||
"Content-Transfer-Encoding: \n" | ||
"Plural-Forms: \n" | ||
|
||
#. module: web_favicon | ||
#: model:ir.model,name:web_favicon.model_res_company | ||
msgid "Companies" | ||
msgstr "" | ||
|
||
#. module: web_favicon | ||
#: model:ir.model.fields,field_description:web_favicon.field_res_company__favicon | ||
msgid "Company Favicon" | ||
msgstr "" | ||
|
||
#. module: web_favicon | ||
#: model:ir.model.fields,help:web_favicon.field_res_company__favicon | ||
msgid "" | ||
"This field holds the image used to display favicon for a given company." | ||
msgstr "" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). | ||
|
||
from . import res_company |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
# Copyright 2015 Therp BV <http://therp.nl> | ||
# Copyright 2016 Pedro M. Baeza | ||
# Copyright 2024 OERP Canada <https://www.oerp.ca> | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). | ||
|
||
import base64 | ||
import hashlib | ||
import io | ||
from random import randrange | ||
|
||
from PIL import Image | ||
|
||
import odoo | ||
from odoo import api, fields, models, tools | ||
from odoo.http import request | ||
|
||
|
||
class ResCompany(models.Model): | ||
_inherit = "res.company" | ||
|
||
def _get_default_favicon(self, original=False): | ||
img_path = odoo.tools.misc.file_path("web/static/img/favicon.ico") | ||
with tools.file_open(img_path, "rb") as f: | ||
if original: | ||
return base64.b64encode(f.read()) | ||
# Modify the source image to add a colored bar on the bottom | ||
# This could seem overkill to modify the pixels 1 by 1, but | ||
# Pillow doesn't provide an easy way to do it, and this | ||
# is acceptable for a 16x16 image. | ||
color = ( | ||
randrange(32, 224, 24), | ||
randrange(32, 224, 24), | ||
randrange(32, 224, 24), | ||
) | ||
original = Image.open(f) | ||
new_image = Image.new("RGBA", original.size) | ||
height = original.size[1] | ||
width = original.size[0] | ||
bar_size = 1 | ||
for y in range(height): | ||
for x in range(width): | ||
pixel = original.getpixel((x, y)) | ||
if height - bar_size <= y + 1 <= height: | ||
new_image.putpixel((x, y), (color[0], color[1], color[2], 255)) | ||
else: | ||
new_image.putpixel( | ||
(x, y), (pixel[0], pixel[1], pixel[2], pixel[3]) | ||
) | ||
stream = io.BytesIO() | ||
new_image.save(stream, format="ICO") | ||
return base64.b64encode(stream.getvalue()) | ||
|
||
favicon = fields.Binary( | ||
string="Company Favicon", | ||
help="This field holds the image used to display favicon for a given company.", | ||
default=_get_default_favicon, | ||
) | ||
|
||
@api.model_create_multi | ||
def create(self, vals_list): | ||
# add default favicon | ||
for vals in vals_list: | ||
if not vals.get("favicon"): | ||
vals["favicon"] = self._get_default_favicon() | ||
return super().create(vals_list) | ||
|
||
# Get favicon from current company | ||
@api.model | ||
def _get_favicon(self): | ||
"""Returns a local url that points to the image field of a given record.""" | ||
if self.env.context.get("website_id"): | ||
website = self.env["website"].browse(self.env.context.get("website_id")) | ||
return website.image_url(website, "favicon") | ||
company_id = ( | ||
request.httprequest.cookies.get("cids") | ||
if request.httprequest.cookies.get("cids") | ||
else False | ||
) | ||
company = ( | ||
self.browse(int(company_id.split("-")[0])).sudo() | ||
if company_id and self.browse(int(company_id.split("-")[0])).sudo().favicon | ||
else False | ||
) | ||
if company: | ||
sha = hashlib.sha512(str(company.write_date).encode("utf-8")).hexdigest()[ | ||
:7 | ||
] | ||
return f"/web/image/{self._name}/{company.id}/favicon?unique={sha}" | ||
else: | ||
return False |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
[build-system] | ||
requires = ["whool"] | ||
build-backend = "whool.buildapi" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
Upload your favicon (16x16, 32x32, 64x64 or "as big as possible") on the | ||
company form. The file format would be ico, gif or png with 16x16, 32x32 or | ||
64x64 pixels and 16 colors. Highers resolutions or colors support depends on | ||
the used browser, but most modern browsers do. | ||
|
||
Note that most browsers cache favicons basically forever, so if you want your | ||
icon to show up, you'll most probably have to delete you browser cache. | ||
Some browsers can refresh the favicon, accessing the URL | ||
<base_url>/web_favicon/favicon. | ||
|
||
You have a sample SVG that can be used as template for generating your icon | ||
in /static/src/img/master_original_favicon.svg. You can also search for some | ||
favicon generators across the web. | ||
|
||
To allow a user to edit the favicon it has to be member of group "Administration / Settings". |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
* OERP Canada \<<https://www.oerp.ca/>\>: | ||
- Daryl Chen \<<[email protected]>\> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
|
||
This module was written to allow you to customize your Odoo instance's shortcut | ||
icon (aka favicon). This is useful for branding purposes, but also for | ||
integrators who have many different Odoo instances running and need to see at a | ||
glance which browser tab does what. | ||
|
||
The icon is shown also for portal users when the website modules are not | ||
installed. | ||
|
||
More info about favicon: https://en.wikipedia.org/wiki/Favicon |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
* Allow to upload some big icon (preferrably SVG or the like) and generate | ||
all the icons from it | ||
* Generate icons suitable for mobile devices and web apps (see /static/src/img/ | ||
folder inside the module for a sample of the possible current formats. | ||
* Put the icon definition at system level, not at company level. It doesn't | ||
make sense (as the icon is cached) to have a different icon per company. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.