diff --git a/assets/templates/asset_embed.html b/assets/templates/asset_embed.html new file mode 100644 index 00000000..e6b37173 --- /dev/null +++ b/assets/templates/asset_embed.html @@ -0,0 +1,45 @@ +{% extends 'base_embed.html' %} +{% load static from staticfiles %} + +{% block content %} + +
+
+ + TEC Asset Database + +
+ +
+

+ Asset: {{ object.asset_id }} | {{ object.description }} + + Category: + {{ object.category }} + +   + + Status: + {{ object.status }} + +

+
+ {% if object.serial_number %} +

+ Serial Number: + {{ object.serial_number }} +

+ {% endif %} + {% if object.comments %} +

+ Comments: + {{ object.comments|linebreaksbr }} +

+ {% endif %} + + +
+
+ + +{% endblock %} diff --git a/assets/urls.py b/assets/urls.py index 3acac945..d4f16bf2 100644 --- a/assets/urls.py +++ b/assets/urls.py @@ -3,12 +3,15 @@ from django.urls import path from assets import views, models from RIGS import versioning +from django.contrib.auth.decorators import login_required +from django.views.decorators.clickjacking import xframe_options_exempt from PyRIGS.decorators import permission_required_with_403 urlpatterns = [ path('', views.AssetList.as_view(), name='asset_index'), path('asset/list/', views.AssetList.as_view(), name='asset_list'), - path('asset/id//', views.AssetDetail.as_view(), name='asset_detail'), + # Lazy way to enable the oembed redirect... + path('asset/id//', permission_required_with_403('', oembed_view="asset_oembed")(views.AssetDetail.as_view()), name='asset_detail'), path('asset/create/', permission_required_with_403('assets.add_asset') (views.AssetCreate.as_view()), name='asset_create'), path('asset/id//edit/', permission_required_with_403('assets.change_asset') @@ -21,6 +24,13 @@ urlpatterns = [ (views.ActivityTable.as_view()), name='asset_activity_table'), path('asset/search/', views.AssetSearch.as_view(), name='asset_search_json'), + path('asset/id//embed/', + xframe_options_exempt( + login_required(login_url='/user/login/embed/')(views.AssetEmbed.as_view())), + name='asset_embed'), + path('asset/id//oembed_json/', + views.AssetOembed.as_view(), + name='asset_oembed'), path('supplier/list', views.SupplierList.as_view(), name='supplier_list'), path('supplier/', views.SupplierDetail.as_view(), name='supplier_detail'), diff --git a/assets/views.py b/assets/views.py index 395daac2..7b0f2200 100644 --- a/assets/views.py +++ b/assets/views.py @@ -1,5 +1,6 @@ from django.contrib.auth.mixins import LoginRequiredMixin from django.http import JsonResponse +from django.http import HttpResponse from django.views import generic from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator @@ -9,6 +10,8 @@ from django.shortcuts import get_object_or_404 from assets import models, forms from RIGS import versioning +import simplejson + @method_decorator(csrf_exempt, name='dispatch') class AssetList(LoginRequiredMixin, generic.ListView): @@ -149,6 +152,28 @@ class AssetDuplicate(DuplicateMixin, AssetIDUrlMixin, AssetCreate): return context +class AssetOembed(generic.View): + model = models.Asset + + def get(self, request, pk=None): + embed_url = reverse('event_embed', args=[pk]) + full_url = "{0}://{1}{2}".format(request.scheme, request.META['HTTP_HOST'], embed_url) + + data = { + 'html': ''.format(full_url), + 'version': '1.0', + 'type': 'rich', + 'height': '250' + } + + json = simplejson.JSONEncoderForHTML().encode(data) + return HttpResponse(json, content_type="application/json") + + +class AssetEmbed(AssetDetail): + template_name = 'asset_embed.html' + + class SupplierList(generic.ListView): model = models.Supplier template_name = 'supplier_list.html'