57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
||
|
from core.forms import NotificationRuleForm, NotificationSettingsForm
|
||
|
from core.models import NotificationRule, NotificationSettings
|
||
|
|
||
|
from core.views.helpers import ObjectCreate, ObjectList, ObjectUpdate, ObjectDelete
|
||
|
|
||
|
# Notifications - we create a new notification settings object if there isn't one
|
||
|
# Hence, there is only an update view, not a create view.
|
||
|
class NotificationsUpdate(LoginRequiredMixin, ObjectUpdate):
|
||
|
model = NotificationSettings
|
||
|
form_class = NotificationSettingsForm
|
||
|
|
||
|
page_title = "Update your notification settings"
|
||
|
page_subtitle = (
|
||
|
"At least the topic must be set if you want to receive notifications."
|
||
|
)
|
||
|
|
||
|
submit_url_name = "notifications_update"
|
||
|
submit_url_args = ["type"]
|
||
|
|
||
|
pk_required = False
|
||
|
|
||
|
hide_cancel = True
|
||
|
|
||
|
def get_object(self, **kwargs):
|
||
|
notification_settings, _ = NotificationSettings.objects.get_or_create(
|
||
|
user=self.request.user
|
||
|
)
|
||
|
return notification_settings
|
||
|
|
||
|
class RuleList(LoginRequiredMixin, ObjectList):
|
||
|
list_template = "partials/rule-list.html"
|
||
|
model = NotificationRule
|
||
|
page_title = "List of notification rules."
|
||
|
|
||
|
list_url_name = "rules"
|
||
|
list_url_args = ["type"]
|
||
|
|
||
|
submit_url_name = "rule_create"
|
||
|
|
||
|
|
||
|
class RuleCreate(LoginRequiredMixin, ObjectCreate):
|
||
|
model = NotificationRule
|
||
|
form_class = NotificationRuleForm
|
||
|
|
||
|
submit_url_name = "rule_create"
|
||
|
|
||
|
|
||
|
class RuleUpdate(LoginRequiredMixin, ObjectUpdate):
|
||
|
model = NotificationRule
|
||
|
form_class = NotificationRuleForm
|
||
|
|
||
|
submit_url_name = "rule_update"
|
||
|
|
||
|
|
||
|
class RuleDelete(LoginRequiredMixin, ObjectDelete):
|
||
|
model = NotificationRule
|