Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
thalia
concrexit
Commits
11896c45
Commit
11896c45
authored
May 15, 2019
by
Luko van der Maas
Browse files
Add sending of notification to participants of event by organisers
parent
6d47ebcf
Changes
6
Hide whitespace changes
Inline
Side-by-side
website/events/admin.py
View file @
11896c45
...
...
@@ -230,6 +230,10 @@ class EventAdmin(DoNextTranslatedModelAdmin):
self
.
admin_site
.
admin_view
(
admin_views
.
EventRegistrationsMarkPresent
.
as_view
()),
name
=
'events_event_all_present'
),
path
(
'<int:pk>/message/'
,
self
.
admin_site
.
admin_view
(
admin_views
.
EventMessage
.
as_view
(
admin
=
self
)),
name
=
'events_event_message'
),
]
return
custom_urls
+
urls
...
...
website/events/admin_views.py
View file @
11896c45
...
...
@@ -18,7 +18,8 @@ from django.views.generic import DetailView, TemplateView, FormView
from
events
import
services
from
events.decorators
import
organiser_only
from
events.exceptions
import
RegistrationError
from
events.forms
import
FieldsForm
from
events.forms
import
FieldsForm
,
EventMessageForm
from
pushnotifications.models
import
Message
,
Category
from
.models
import
Event
,
Registration
...
...
@@ -110,6 +111,74 @@ class RegistrationAdminFields(FormView):
))
@
method_decorator
(
staff_member_required
,
name
=
'dispatch'
)
@
method_decorator
(
organiser_only
,
name
=
'dispatch'
)
class
EventMessage
(
FormView
):
"""
Renders a form that allows the user to create a push notification for all
users registers to the event.
"""
form_class
=
EventMessageForm
template_name
=
'events/admin/message_form.html'
admin
=
None
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
().
get_context_data
(
**
kwargs
)
context
.
update
({
**
self
.
admin
.
admin_site
.
each_context
(
self
.
request
),
'add'
:
False
,
'change'
:
True
,
'has_view_permission'
:
True
,
'has_add_permission'
:
False
,
'has_change_permission'
:
self
.
request
.
user
.
has_perms
(
'events.change_event'
),
'has_delete_permission'
:
False
,
'has_editable_inline_admin_formsets'
:
False
,
'app_label'
:
'events'
,
'opts'
:
self
.
event
.
_meta
,
'is_popup'
:
False
,
'save_as'
:
False
,
'save_on_top'
:
False
,
'original'
:
self
.
event
,
'obj_id'
:
self
.
event
.
pk
,
'title'
:
_
(
'Send push notification'
),
'adminform'
:
helpers
.
AdminForm
(
context
[
'form'
],
(
(
None
,
{
'fields'
:
[
f
for
f
in
context
[
'form'
].
fields
.
keys
()]
}),
),
{})
})
return
context
def
form_valid
(
self
,
form
):
values
=
form
.
cleaned_data
message
=
Message
(
title_nl
=
values
[
'title_nl'
],
title_en
=
values
[
'title_en'
],
body_nl
=
values
[
'title_nl'
],
body_en
=
values
[
'title_en'
],
url
=
values
[
'url'
],
category
=
Category
.
objects
.
get
(
key
=
'event'
)
)
message
.
save
()
message
.
users
.
set
([
r
.
member
for
r
in
self
.
event
.
participants
if
r
.
member
])
message
.
send
()
print
(
message
)
messages
.
success
(
self
.
request
,
_
(
"Message sent successfully."
))
if
'_save'
in
self
.
request
.
POST
:
return
HttpResponseRedirect
(
reverse
(
'admin:events_event_details'
,
args
=
[
str
(
self
.
event
.
pk
)]
))
def
dispatch
(
self
,
request
,
*
args
,
**
kwargs
):
self
.
event
=
get_object_or_404
(
Event
,
pk
=
self
.
kwargs
[
'pk'
])
return
super
().
dispatch
(
request
,
*
args
,
**
kwargs
)
@
method_decorator
(
staff_member_required
,
name
=
'dispatch'
)
@
method_decorator
(
organiser_only
,
name
=
'dispatch'
)
class
EventRegistrationsExport
(
View
,
PermissionRequiredMixin
):
...
...
website/events/forms.py
View file @
11896c45
...
...
@@ -86,3 +86,12 @@ class FieldsForm(forms.Form):
def
field_values
(
self
):
for
key
,
field
in
self
.
information_fields
.
items
():
yield
(
key
,
self
.
cleaned_data
[
key
])
class
EventMessageForm
(
forms
.
Form
):
"""Form that outputs a widget to get info to send a push notification"""
title_en
=
forms
.
CharField
(
required
=
True
,
max_length
=
150
)
title_nl
=
forms
.
CharField
(
required
=
True
,
max_length
=
150
)
body_en
=
forms
.
CharField
(
required
=
True
)
body_nl
=
forms
.
CharField
(
required
=
True
)
url
=
forms
.
CharField
(
max_length
=
256
)
website/events/templates/events/admin/details.html
View file @
11896c45
...
...
@@ -55,6 +55,7 @@
<a
href=
"{% url 'admin:events_event_export' pk=event.pk %}"
class=
"button"
>
{% trans "Export registrations" %}
</a>
<a
href=
"{% url 'admin:events_event_export_email' pk=event.pk %}"
class=
"button"
>
{% trans "Export email addresses of attendees" %}
</a>
<a
href=
"{% url 'admin:events_event_all_present' pk=event.pk %}"
class=
"button"
>
{% trans "Set all registered to paid and present" %}
</a>
<a
href=
"{% url 'admin:events_event_message' pk=event.pk %}"
class=
"button"
>
{% trans "Send pushnotification to registerd users" %}
</a>
</div>
</div>
{% endblock %}
...
...
website/events/templates/events/admin/message_form.html
0 → 100644
View file @
11896c45
{% extends "admin/change_form.html" %}
{% load i18n admin_urls static compress %}
{% block extrastyle %}
{{ block.super }}
{% compress css %}
<link
rel=
"stylesheet"
type=
"text/x-scss"
href=
"{% static 'admin/pushnotifications/css/forms.scss' %}"
/>
{% endcompress %}
{% endblock %}
{% block submit_buttons_bottom %}
<div
class=
"submit-row pushnotifications-row"
>
<input
type=
"submit"
value=
"Send message"
class=
"default button"
name=
"_save"
data-_extension-text-contrast=
""
>
</div>
{% endblock %}
website/pushnotifications/static/admin/pushnotifications/css/forms.scss
View file @
11896c45
...
...
@@ -11,7 +11,7 @@
}
}
.pushnotifications-row
a
.button
{
.pushnotifications-row
.button
{
background-color
:
#e65c95
;
font-size
:
13px
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment