Ensure subscribe button appears only on relevant models

This commit is contained in:
Jeremy Stretch 2024-07-12 13:36:28 -04:00
parent 4f0cc950bc
commit aa8a891122
3 changed files with 23 additions and 16 deletions

View File

@ -77,7 +77,7 @@ Context:
{% if perms.extras.add_bookmark and object.bookmarks %}
{% bookmark_button object %}
{% endif %}
{% if perms.extras.add_subscription %}
{% if perms.extras.add_subscription and object.subscriptions %}
{% subscribe_button object %}
{% endif %}
{% if request.user|can_add:object %}

View File

@ -1,16 +1,18 @@
{% load i18n %}
<form action="{{ form_url }}?return_url={{ return_url }}" method="post">
{% csrf_token %}
{% for field, value in form_data.items %}
<input type="hidden" name="{{ field }}" value="{{ value }}" />
{% endfor %}
{% if subscription %}
<button type="submit" class="btn btn-cyan">
<i class="mdi mdi-bell-minus"></i> {% trans "Unsubscribe" %}
</button>
{% else %}
<button type="submit" class="btn btn-cyan">
<i class="mdi mdi-bell-plus"></i> {% trans "Subscribe" %}
</button>
{% endif %}
</form>
{% if form_url %}
<form action="{{ form_url }}?return_url={{ return_url }}" method="post">
{% csrf_token %}
{% for field, value in form_data.items %}
<input type="hidden" name="{{ field }}" value="{{ value }}" />
{% endfor %}
{% if subscription %}
<button type="submit" class="btn btn-cyan">
<i class="mdi mdi-bell-minus"></i> {% trans "Unsubscribe" %}
</button>
{% else %}
<button type="submit" class="btn btn-cyan">
<i class="mdi mdi-bell-plus"></i> {% trans "Subscribe" %}
</button>
{% endif %}
</form>
{% endif %}

View File

@ -4,6 +4,7 @@ from django.urls import NoReverseMatch, reverse
from core.models import ObjectType
from extras.models import Bookmark, ExportTemplate, Subscription
from netbox.models.features import NotificationsMixin
from utilities.querydict import prepare_cloned_fields
from utilities.views import get_viewname
@ -97,6 +98,10 @@ def delete_button(instance):
@register.inclusion_tag('buttons/subscribe.html', takes_context=True)
def subscribe_button(context, instance):
# Skip for objects which don't support notifications
if not (issubclass(instance.__class__, NotificationsMixin)):
return {}
# Check if this user has already subscribed to the object
content_type = ContentType.objects.get_for_model(instance)
subscription = Subscription.objects.filter(