diff --git a/PyRIGS/views.py b/PyRIGS/views.py index 2ba09f6c..0216b104 100644 --- a/PyRIGS/views.py +++ b/PyRIGS/views.py @@ -3,6 +3,7 @@ import operator from functools import reduce import simplejson +from django.contrib.auth.decorators import login_required from django.contrib import messages from django.core import serializers from django.core.exceptions import PermissionDenied @@ -11,6 +12,7 @@ from django.http import HttpResponse from django.shortcuts import get_object_or_404 from django.urls import reverse_lazy, reverse, NoReverseMatch from django.views import generic +from django.views.decorators.clickjacking import xframe_options_exempt from RIGS import models from assets import models as asset_models @@ -19,10 +21,8 @@ from assets import models as asset_models def is_ajax(request): return request.headers.get('x-requested-with') == 'XMLHttpRequest' -# Displays the current rig count along with a few other bits and pieces - -class Index(generic.TemplateView): +class Index(generic.TemplateView): # Displays the current rig count along with a few other bits and pieces template_name = 'index.html' def get_context_data(self, **kwargs): @@ -230,15 +230,29 @@ class SearchHelp(generic.TemplateView): template_name = 'search_help.html' -""" -Called from a modal window (e.g. when an item is submitted to an event/invoice). -May optionally also include some javascript in a success message to cause a load of -the new information onto the page. -""" - - class CloseModal(generic.TemplateView): + """ + Called from a modal window (e.g. when an item is submitted to an event/invoice). + May optionally also include some javascript in a success message to cause a load of + the new information onto the page. + """ template_name = 'closemodal.html' def get_context_data(self, **kwargs): return {'messages': messages.get_messages(self.request)} + + +class OEmbedView(generic.View): + def get(self, request, pk=None): + embed_url = reverse(self.url_name, 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") diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 7ce12a26..715c38a8 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -27,6 +27,7 @@ from django.views import generic from z3c.rml import rml2pdf from PyRIGS import decorators +from PyRIGS.views import OEmbedView from RIGS import models, forms __author__ = 'ghost' @@ -60,28 +61,15 @@ class EventDetail(generic.DetailView): model = models.Event -class EventOembed(generic.View): - model = models.Event - - 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 EventEmbed(EventDetail): template_name = 'event_embed.html' +class EventOEmbed(OEmbedView): + model = models.Event + url_name = 'event_embed' + + class EventCreate(generic.CreateView): model = models.Event form_class = forms.EventForm diff --git a/RIGS/urls.py b/RIGS/urls.py index b1a4afc0..3b44c450 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -1,5 +1,4 @@ from django.contrib.auth.decorators import login_required -from django.contrib.auth.decorators import login_required from django.urls import path, re_path from django.views.decorators.clickjacking import xframe_options_exempt from django.views.generic import RedirectView @@ -62,7 +61,7 @@ urlpatterns = [ path('event//embed/', xframe_options_exempt(login_required(login_url='/user/login/embed/')(rigboard.EventEmbed.as_view())), name='event_embed'), - path('event//oembed_json/', rigboard.EventOembed.as_view(), + path('event//oembed_json/', rigboard.EventOEmbed.as_view(), name='event_oembed'), path('event//print/', permission_required_with_403('RIGS.view_event')(rigboard.EventPrint.as_view()), name='event_print'), diff --git a/assets/urls.py b/assets/urls.py index 1fd2c850..6e467e08 100644 --- a/assets/urls.py +++ b/assets/urls.py @@ -3,6 +3,7 @@ from django.urls import path from django.views.decorators.clickjacking import xframe_options_exempt from PyRIGS.decorators import has_oembed, permission_required_with_403 +from PyRIGS.views import OEmbedView from assets import views urlpatterns = [ @@ -26,9 +27,7 @@ urlpatterns = [ 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('asset/id//oembed_json/', views.AssetOEmbed.as_view(), name='asset_oembed'), path('asset/audit/', permission_required_with_403('assets.change_asset')(views.AssetAuditList.as_view()), name='asset_audit_list'), path('asset/id//audit/', permission_required_with_403('assets.change_asset')(views.AssetAudit.as_view()), name='asset_audit'), diff --git a/assets/views.py b/assets/views.py index c4367d53..2a6e3284 100644 --- a/assets/views.py +++ b/assets/views.py @@ -11,7 +11,7 @@ from django.views import generic from django.views.decorators.csrf import csrf_exempt from PyRIGS.views import GenericListView, GenericDetailView, GenericUpdateView, GenericCreateView, ModalURLMixin, \ - is_ajax + is_ajax, OEmbedView from assets import forms, models @@ -166,29 +166,15 @@ class AssetDuplicate(DuplicateMixin, AssetIDUrlMixin, AssetCreate): return context -class AssetOembed(generic.View): - model = models.Asset - - def get(self, request, pk=None): - embed_url = reverse('asset_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' -@method_decorator(csrf_exempt, name='dispatch') +class AssetOEmbed(OEmbedView): + model = models.Asset + url_name = 'asset_embed' + + class AssetAuditList(AssetList): template_name = 'asset_audit_list.html' hide_hidden_status = False