Before this commit, selecting an unsplash image on website, then going on a product page and selecting that same image in the media-dialog would not work, and upon saving, the image would be the image placeholder. A previous fix in odoo/odoo#31328 added handling so that you could choose unsplash images for a product, but it failed to account for unsplash images that had already been added on a public view (for example on a website page), which the user can choose in the media-dialog. This was caused by the fix only searching for the unsplash attachment on the current model, and not among public attachments, resulting in an empty search result. This commit fixes that by adding that the attachment we are looking for should either be on the current model, or be a public attachment. closes odoo/odoo#49937 X-original-commit: 196d6b1630fa443bc1d143f76f62f7a719ca4930 Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com> Signed-off-by: Quentin Smetz (qsm) <qsm@odoo.com>
31 lines
977 B
Python
31 lines
977 B
Python
from werkzeug import urls
|
|
|
|
from odoo import models, api
|
|
|
|
|
|
class Image(models.AbstractModel):
|
|
_inherit = 'ir.qweb.field.image'
|
|
|
|
@api.model
|
|
def from_html(self, model, field, element):
|
|
if element.find('.//img') is None:
|
|
return False
|
|
url = element.find('.//img').get('src')
|
|
url_object = urls.url_parse(url)
|
|
|
|
if url_object.path.startswith('/unsplash/'):
|
|
res_id = element.get('data-oe-id')
|
|
if res_id:
|
|
res_id = int(res_id)
|
|
res_model = model._name
|
|
attachment = self.env['ir.attachment'].search([
|
|
'&', '|', '&',
|
|
('res_model', '=', res_model),
|
|
('res_id', '=', res_id),
|
|
('public', '=', True),
|
|
('url', '=', url_object.path),
|
|
], limit=1)
|
|
return attachment.datas
|
|
|
|
return super(Image, self).from_html(model, field, element)
|