Commit 17d1f9be by Matt Drayer

Merge pull request #11037 from edx/ziafazal/SOL-1496

SOL-1496: added a slug field to reference template asset using this field
parents 190304be bb1c86ba
...@@ -5,6 +5,7 @@ from django.utils.translation import get_language_bidi ...@@ -5,6 +5,7 @@ from django.utils.translation import get_language_bidi
from mako.exceptions import TemplateLookupException from mako.exceptions import TemplateLookupException
from microsite_configuration import microsite from microsite_configuration import microsite
from certificates.api import get_asset_url_by_slug
%> %>
<%def name='url(file, raw=False)'><% <%def name='url(file, raw=False)'><%
...@@ -14,6 +15,13 @@ except: ...@@ -14,6 +15,13 @@ except:
url = file url = file
%>${url}${"?raw" if raw else ""}</%def> %>${url}${"?raw" if raw else ""}</%def>
<%def name='certificate_asset_url(slug)'><%
try:
url = get_asset_url_by_slug(slug)
except:
url = ''
%>${url}</%def>
<%def name='css(group, raw=False)'> <%def name='css(group, raw=False)'>
<% <%
rtl_group = '{}-rtl'.format(group) rtl_group = '{}-rtl'.format(group)
......
...@@ -45,7 +45,8 @@ class CertificateTemplateAssetAdmin(admin.ModelAdmin): ...@@ -45,7 +45,8 @@ class CertificateTemplateAssetAdmin(admin.ModelAdmin):
""" """
Django admin customizations for CertificateTemplateAsset model Django admin customizations for CertificateTemplateAsset model
""" """
list_display = ('description', '__unicode__') list_display = ('description', 'asset_slug',)
prepopulated_fields = {"asset_slug": ("description",)}
class GeneratedCertificateAdmin(admin.ModelAdmin): class GeneratedCertificateAdmin(admin.ModelAdmin):
......
...@@ -26,6 +26,7 @@ from certificates.models import ( ...@@ -26,6 +26,7 @@ from certificates.models import (
ExampleCertificateSet, ExampleCertificateSet,
GeneratedCertificate, GeneratedCertificate,
CertificateTemplate, CertificateTemplate,
CertificateTemplateAsset,
) )
from certificates.queue import XQueueCertInterface from certificates.queue import XQueueCertInterface
...@@ -477,3 +478,16 @@ def emit_certificate_event(event_name, user, course_id, course=None, event_data= ...@@ -477,3 +478,16 @@ def emit_certificate_event(event_name, user, course_id, course=None, event_data=
with tracker.get_tracker().context(event_name, context): with tracker.get_tracker().context(event_name, context):
tracker.emit(event_name, event_data) tracker.emit(event_name, event_data)
def get_asset_url_by_slug(asset_slug):
"""
Returns certificate template asset url for given asset_slug.
"""
asset_url = ''
try:
template_asset = CertificateTemplateAsset.objects.get(asset_slug=asset_slug)
asset_url = template_asset.asset.url
except CertificateTemplateAsset.DoesNotExist:
pass
return asset_url
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('certificates', '0005_auto_20151208_0801'),
]
operations = [
migrations.AddField(
model_name='certificatetemplateasset',
name='asset_slug',
field=models.SlugField(help_text="Asset's unique slug. We can reference the asset in templates using this value.", max_length=255, unique=True, null=True),
),
]
...@@ -948,6 +948,12 @@ class CertificateTemplateAsset(TimeStampedModel): ...@@ -948,6 +948,12 @@ class CertificateTemplateAsset(TimeStampedModel):
upload_to=template_assets_path, upload_to=template_assets_path,
help_text=_(u'Asset file. It could be an image or css file.'), help_text=_(u'Asset file. It could be an image or css file.'),
) )
asset_slug = models.SlugField(
max_length=255,
unique=True,
null=True,
help_text=_(u'Asset\'s unique slug. We can reference the asset in templates using this value.'),
)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
"""save the certificate template asset """ """save the certificate template asset """
......
...@@ -26,7 +26,8 @@ from certificates.models import ( ...@@ -26,7 +26,8 @@ from certificates.models import (
CertificateStatuses, CertificateStatuses,
CertificateSocialNetworks, CertificateSocialNetworks,
CertificateTemplate, CertificateTemplate,
CertificateHtmlViewConfiguration CertificateHtmlViewConfiguration,
CertificateTemplateAsset,
) )
from certificates.tests.factories import ( from certificates.tests.factories import (
...@@ -138,6 +139,7 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase): ...@@ -138,6 +139,7 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase):
Creates a custom certificate template entry in DB. Creates a custom certificate template entry in DB.
""" """
template_html = """ template_html = """
<%namespace name='static' file='static_content.html'/>
<html> <html>
<body> <body>
lang: ${LANGUAGE_CODE} lang: ${LANGUAGE_CODE}
...@@ -145,6 +147,7 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase): ...@@ -145,6 +147,7 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase):
mode: ${course_mode} mode: ${course_mode}
${accomplishment_copy_course_description} ${accomplishment_copy_course_description}
${twitter_url} ${twitter_url}
<img class="custom-logo" src="${static.certificate_asset_url('custom-logo')}" />
</body> </body>
</html> </html>
""" """
...@@ -824,3 +827,38 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase): ...@@ -824,3 +827,38 @@ class CertificatesViewsTests(ModuleStoreTestCase, EventTrackingTestCase):
else: else:
self.assertContains(response, "Tweet this Accomplishment") self.assertContains(response, "Tweet this Accomplishment")
self.assertContains(response, 'https://twitter.com/intent/tweet') self.assertContains(response, 'https://twitter.com/intent/tweet')
@override_settings(FEATURES=FEATURES_WITH_CUSTOM_CERTS_ENABLED)
def test_certificate_asset_by_slug(self):
"""
Tests certificate template asset display by slug using static.certificate_asset_url method.
"""
self._add_course_certificates(count=1, signatory_count=2)
self._create_custom_template(mode='honor')
test_url = get_certificate_url(
user_id=self.user.id,
course_id=unicode(self.course.id)
)
# render certificate without template asset
with patch('certificates.api.get_course_organizations') as mock_get_orgs:
mock_get_orgs.return_value = []
response = self.client.get(test_url)
self.assertContains(response, '<img class="custom-logo" src="" />')
template_asset = CertificateTemplateAsset(
description='custom logo',
asset='certificate_template_assets/32/test_logo.png',
asset_slug='custom-logo',
)
template_asset.save()
# render certificate with template asset
with patch('certificates.api.get_course_organizations') as mock_get_orgs:
mock_get_orgs.return_value = []
response = self.client.get(test_url)
self.assertContains(
response, '<img class="custom-logo" src="{}certificate_template_assets/32/test_logo.png" />'.format(
settings.MEDIA_URL
)
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment