[IMP] website_slides: add computed field for slide download URL
We have introduced a method that compute the download URL of a slide in the fix odoo/odoo#113749 which we convert here into a computed field to simplify the code. Task-3196081 closes odoo/odoo#115267 Signed-off-by: Stéphane Debauche (std) <std@odoo.com>
This commit is contained in:
@@ -18,6 +18,7 @@ class SlideResource(models.Model):
|
||||
data = fields.Binary('Resource', compute='_compute_reset_resources', store=True, readonly=False)
|
||||
file_name = fields.Char(store=True)
|
||||
link = fields.Char('Link', compute='_compute_reset_resources', store=True, readonly=False)
|
||||
download_url = fields.Char('Download URL', compute='_compute_download_url')
|
||||
|
||||
_sql_constraints = [
|
||||
('check_url', "CHECK (resource_type != 'url' OR link IS NOT NULL)", 'A resource of type url must contain a link.'),
|
||||
@@ -46,17 +47,21 @@ class SlideResource(models.Model):
|
||||
new_name = self.link
|
||||
resource.name = new_name
|
||||
|
||||
@api.depends('name', 'file_name')
|
||||
def _compute_download_url(self):
|
||||
for resource in self:
|
||||
extension = get_extension(resource.file_name) if resource.file_name else ''
|
||||
if not resource.name:
|
||||
resource.download_url = False
|
||||
continue
|
||||
file_name = resource.name if resource.name.endswith(extension) else resource.name + extension
|
||||
resource.download_url = f'/web/content/slide.slide.resource/{resource.id}/data?' + url_encode({
|
||||
'download': 'true',
|
||||
'filename': file_name,
|
||||
})
|
||||
|
||||
@api.constrains('data')
|
||||
def _check_link_type(self):
|
||||
for record in self:
|
||||
if record.resource_type != 'file' and record.data:
|
||||
raise ValidationError(_("Resource %(resource_name)s is a link and should not contain a data file", resource_name=record.name))
|
||||
|
||||
def _get_download_url(self):
|
||||
self.ensure_one()
|
||||
extension_file_name = get_extension(self.file_name) if self.file_name else ''
|
||||
file_name = self.name if self.name.endswith(extension_file_name) else self.name + extension_file_name
|
||||
return f'/web/content/slide.slide.resource/{self.id}/data?' + url_encode({
|
||||
'download': 'true',
|
||||
'filename': file_name
|
||||
})
|
||||
|
||||
@@ -85,4 +85,4 @@ class TestResources(common.SlidesCase, HttpCase):
|
||||
resource.write({'name': name, 'file_name': file_name})
|
||||
with self.subTest(name=name, file_name=file_name, expected_download_name=expected_download_name):
|
||||
self.assertIn(f"filename*=UTF-8''{url_quote(expected_download_name)}",
|
||||
self.url_open(resource._get_download_url()).headers['Content-Disposition'])
|
||||
self.url_open(resource.download_url).headers['Content-Disposition'])
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
</t>
|
||||
<div class="o_wslides_js_course_join ps-4" t-if="aside_slide._has_additional_resources()">
|
||||
<li t-foreach="aside_slide.slide_resource_ids" t-as="resource" t-if="resource.resource_type == 'file'">
|
||||
<a t-att-href="resource._get_download_url()" class="text-decoration-none small">
|
||||
<a t-att-href="resource.download_url" class="text-decoration-none small">
|
||||
<i class="fa fa-download me-1"/><span t-field="resource.name"/>
|
||||
</a>
|
||||
</li>
|
||||
@@ -439,7 +439,7 @@
|
||||
</span>
|
||||
<div class="text-muted me-auto border-start ps-3">
|
||||
<t t-foreach="slide.slide_resource_ids" t-as="resource" t-if="resource.resource_type == 'file' and resource.data">
|
||||
<a t-att-href="resource._get_download_url()" t-esc="resource.name"/><br />
|
||||
<a t-att-href="resource.download_url" t-esc="resource.name"/><br />
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
<div class="o_wslides_js_course_join ps-0" t-if="slide._has_additional_resources('file')">
|
||||
<t t-set="resources" t-value="slide.slide_resource_ids.filtered(lambda res: res.resource_type == 'file')"/>
|
||||
<li t-foreach="resources" t-as="resource" class="mb-1">
|
||||
<a class="o_wslides_fs_slide_link" t-att-href="resource._get_download_url()">
|
||||
<a class="o_wslides_fs_slide_link" t-att-href="resource.download_url">
|
||||
<i class="fa fa-download me-2"/><span t-esc="resource.name"/>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
Reference in New Issue
Block a user