Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates and Bug Fixes #114

Merged
merged 3 commits into from
May 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 14 additions & 4 deletions pages/cap/views.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import json
from typing import List
from lxml import etree

from capeditor.constants import SEVERITY_MAPPING
from capeditor.models import CapSetting
from capeditor.renderers import CapXMLRenderer
from capeditor.serializers import AlertSerializer as BaseAlertSerializer
from django.contrib.syndication.views import Feed
from base.cache import wagcache
from django.core.validators import validate_email
from django.db.models.base import Model
from django.http import JsonResponse, HttpResponse
Expand All @@ -17,10 +15,12 @@
from django.utils import timezone
from django.utils.feedgenerator import Enclosure, rfc2822_date
from django.utils.feedgenerator import Rss201rev2Feed
from lxml import etree
from rest_framework.generics import get_object_or_404
from wagtail.api.v2.utils import get_full_url
from wagtail.models import Site

from base.cache import wagcache
from .models import CapAlertPage
from .sign import sign_xml

Expand Down Expand Up @@ -138,18 +138,28 @@ def get_cap_xml(request, identifier):
xml = wagcache.get(f"cap_xml_{identifier}")

if not xml:
data = AlertSerializer(alert).data
data = AlertSerializer(alert, context={
"request": request,
}).data

xml = CapXMLRenderer().render(data)
xml_bytes = bytes(xml, encoding='utf-8')
signed = False

try:
signed_xml = sign_xml(xml_bytes)
if signed_xml:
xml = signed_xml
signed = True
except Exception as e:
print(e)
pass

root = etree.fromstring(xml)
if signed:
root = etree.fromstring(xml)
else:
root = etree.fromstring(xml_bytes)

tree = etree.ElementTree(root)
style_url = get_full_url(request, reverse("cap_stylesheet"))
pi = etree.ProcessingInstruction('xml-stylesheet', f'type="text/xsl" href="{style_url}"')
Expand Down
28 changes: 28 additions & 0 deletions pages/cap/wagtail_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from wagtail.admin.forms.pages import CopyForm
from wagtail.admin.menu import MenuItem, Menu
from wagtail.blocks import StreamValue
from wagtail_modeladmin.helpers import PagePermissionHelper
from wagtail.models import Page
from wagtail_modeladmin.helpers import AdminURLHelper
from wagtail_modeladmin.menus import GroupMenuItem
Expand All @@ -32,13 +33,40 @@
from .utils import create_cap_geomanager_dataset


class CAPPagePermissionHelper(PagePermissionHelper):
def user_can_edit_obj(self, user, obj):
can_edit = super().user_can_edit_obj(user, obj)

if obj.live and obj.status == "Actual":
return False

return can_edit

def user_can_delete_obj(self, user, obj):
can_delete = super().user_can_delete_obj(user, obj)

if obj.live and obj.status == "Actual":
return False

return can_delete

def user_can_unpublish_obj(self, user, obj):
can_unpublish = super().user_can_unpublish_obj(user, obj)

if obj.live and obj.status == "Actual":
return False

return can_unpublish


class CAPAdmin(ModelAdmin):
model = CapAlertPage
menu_label = _('Alerts')
menu_icon = 'list-ul'
menu_order = 200
add_to_settings_menu = False
exclude_from_explorer = False
permission_helper_class = CAPPagePermissionHelper


class CAPMenuGroupAdminMenuItem(GroupMenuItem):
Expand Down
Loading