2020-07-10 14:06:00 +01:00
|
|
|
from flask import abort, redirect, render_template, request, url_for
|
2020-07-06 10:53:14 +01:00
|
|
|
|
|
|
|
|
from app import current_service
|
|
|
|
|
from app.main import main
|
2020-07-06 10:53:16 +01:00
|
|
|
from app.main.forms import BroadcastAreaForm, SearchByNameForm
|
2020-07-09 15:48:56 +01:00
|
|
|
from app.models.broadcast_message import BroadcastMessage, BroadcastMessages
|
2020-07-06 10:53:14 +01:00
|
|
|
from app.utils import service_has_permission, user_has_permissions
|
|
|
|
|
|
|
|
|
|
|
2020-07-08 11:34:16 +01:00
|
|
|
@main.route('/services/<uuid:service_id>/broadcast-dashboard')
|
|
|
|
|
@user_has_permissions()
|
|
|
|
|
@service_has_permission('broadcast')
|
|
|
|
|
def broadcast_dashboard(service_id):
|
2020-07-09 15:48:56 +01:00
|
|
|
broadcast_messages = BroadcastMessages(service_id)
|
2020-07-08 11:34:16 +01:00
|
|
|
return render_template(
|
|
|
|
|
'views/broadcast/dashboard.html',
|
2020-07-09 15:48:56 +01:00
|
|
|
live_broadcasts=broadcast_messages.with_status('broadcasting'),
|
|
|
|
|
previous_broadcasts=broadcast_messages.with_status('cancelled', 'completed'),
|
2020-07-08 11:34:16 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2020-07-10 14:06:00 +01:00
|
|
|
@main.route('/services/<uuid:service_id>/new-broadcast/<uuid:template_id>')
|
2020-07-06 10:53:14 +01:00
|
|
|
@user_has_permissions('send_messages')
|
|
|
|
|
@service_has_permission('broadcast')
|
2020-07-09 10:33:50 +01:00
|
|
|
def broadcast(service_id, template_id):
|
2020-07-06 10:53:14 +01:00
|
|
|
return redirect(url_for(
|
|
|
|
|
'.preview_broadcast_areas',
|
|
|
|
|
service_id=current_service.id,
|
2020-07-09 10:33:50 +01:00
|
|
|
broadcast_message_id=BroadcastMessage.create(
|
|
|
|
|
service_id=service_id,
|
|
|
|
|
template_id=template_id,
|
|
|
|
|
).id,
|
2020-07-06 10:53:14 +01:00
|
|
|
))
|
|
|
|
|
|
|
|
|
|
|
2020-07-09 10:33:50 +01:00
|
|
|
@main.route('/services/<uuid:service_id>/broadcast/<uuid:broadcast_message_id>/areas')
|
2020-07-06 10:53:14 +01:00
|
|
|
@user_has_permissions('send_messages')
|
|
|
|
|
@service_has_permission('broadcast')
|
2020-07-09 10:33:50 +01:00
|
|
|
def preview_broadcast_areas(service_id, broadcast_message_id):
|
2020-07-06 10:53:14 +01:00
|
|
|
return render_template(
|
|
|
|
|
'views/broadcast/preview-areas.html',
|
2020-07-09 10:33:50 +01:00
|
|
|
broadcast_message=BroadcastMessage.from_id(
|
|
|
|
|
broadcast_message_id,
|
|
|
|
|
service_id=current_service.id,
|
|
|
|
|
),
|
2020-07-06 10:53:14 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2020-07-09 10:33:50 +01:00
|
|
|
@main.route('/services/<uuid:service_id>/broadcast/<uuid:broadcast_message_id>/libraries')
|
2020-07-06 10:53:14 +01:00
|
|
|
@user_has_permissions('send_messages')
|
|
|
|
|
@service_has_permission('broadcast')
|
2020-07-09 10:33:50 +01:00
|
|
|
def choose_broadcast_library(service_id, broadcast_message_id):
|
2020-07-06 10:53:14 +01:00
|
|
|
return render_template(
|
|
|
|
|
'views/broadcast/libraries.html',
|
2020-07-09 10:33:50 +01:00
|
|
|
libraries=BroadcastMessage.libraries,
|
|
|
|
|
broadcast_message_id=broadcast_message_id,
|
2020-07-06 10:53:14 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2020-07-09 10:33:50 +01:00
|
|
|
@main.route(
|
|
|
|
|
'/services/<uuid:service_id>/broadcast/<uuid:broadcast_message_id>/libraries/<library_slug>',
|
|
|
|
|
methods=['GET', 'POST'],
|
|
|
|
|
)
|
2020-07-06 10:53:14 +01:00
|
|
|
@user_has_permissions('send_messages')
|
|
|
|
|
@service_has_permission('broadcast')
|
2020-07-09 10:33:50 +01:00
|
|
|
def choose_broadcast_area(service_id, broadcast_message_id, library_slug):
|
|
|
|
|
broadcast_message = BroadcastMessage.from_id(
|
|
|
|
|
broadcast_message_id,
|
|
|
|
|
service_id=current_service.id,
|
|
|
|
|
)
|
|
|
|
|
library = BroadcastMessage.libraries.get(library_slug)
|
2020-07-06 10:53:16 +01:00
|
|
|
form = BroadcastAreaForm.from_library(library)
|
|
|
|
|
if form.validate_on_submit():
|
2020-07-09 10:33:50 +01:00
|
|
|
broadcast_message.add_areas(*form.areas.data)
|
2020-07-06 10:53:16 +01:00
|
|
|
return redirect(url_for(
|
|
|
|
|
'.preview_broadcast_areas',
|
|
|
|
|
service_id=current_service.id,
|
2020-07-09 10:33:50 +01:00
|
|
|
broadcast_message_id=broadcast_message.id,
|
2020-07-06 10:53:16 +01:00
|
|
|
))
|
2020-07-06 10:53:14 +01:00
|
|
|
return render_template(
|
|
|
|
|
'views/broadcast/areas.html',
|
2020-07-06 10:53:16 +01:00
|
|
|
form=form,
|
2020-07-06 10:53:16 +01:00
|
|
|
search_form=SearchByNameForm(),
|
|
|
|
|
show_search_form=(len(form.areas.choices) > 7),
|
2020-07-06 10:53:16 +01:00
|
|
|
page_title=library.name,
|
2020-07-10 09:25:17 +01:00
|
|
|
broadcast_message=broadcast_message,
|
2020-07-06 10:53:14 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2020-07-09 10:33:50 +01:00
|
|
|
@main.route('/services/<uuid:service_id>/broadcast/<uuid:broadcast_message_id>/remove/<area_slug>')
|
2020-07-06 10:53:14 +01:00
|
|
|
@user_has_permissions('send_messages')
|
|
|
|
|
@service_has_permission('broadcast')
|
2020-07-09 10:33:50 +01:00
|
|
|
def remove_broadcast_area(service_id, broadcast_message_id, area_slug):
|
|
|
|
|
BroadcastMessage.from_id(
|
|
|
|
|
broadcast_message_id,
|
|
|
|
|
service_id=current_service.id,
|
|
|
|
|
).remove_area(
|
|
|
|
|
area_slug
|
|
|
|
|
)
|
2020-07-06 10:53:14 +01:00
|
|
|
return redirect(url_for(
|
|
|
|
|
'.preview_broadcast_areas',
|
|
|
|
|
service_id=current_service.id,
|
2020-07-09 10:33:50 +01:00
|
|
|
broadcast_message_id=broadcast_message_id,
|
2020-07-06 10:53:14 +01:00
|
|
|
))
|
|
|
|
|
|
|
|
|
|
|
2020-07-09 10:33:50 +01:00
|
|
|
@main.route(
|
|
|
|
|
'/services/<uuid:service_id>/broadcast/<uuid:broadcast_message_id>/preview',
|
|
|
|
|
methods=['GET', 'POST'],
|
|
|
|
|
)
|
2020-07-06 10:53:14 +01:00
|
|
|
@user_has_permissions('send_messages')
|
|
|
|
|
@service_has_permission('broadcast')
|
2020-07-09 10:33:50 +01:00
|
|
|
def preview_broadcast_message(service_id, broadcast_message_id):
|
|
|
|
|
broadcast_message = BroadcastMessage.from_id(
|
|
|
|
|
broadcast_message_id,
|
|
|
|
|
service_id=current_service.id,
|
|
|
|
|
)
|
2020-07-06 10:53:14 +01:00
|
|
|
if request.method == 'POST':
|
2020-07-09 10:33:50 +01:00
|
|
|
broadcast_message.start_broadcast()
|
|
|
|
|
return redirect(url_for(
|
|
|
|
|
'.broadcast_dashboard',
|
|
|
|
|
service_id=current_service.id,
|
|
|
|
|
))
|
2020-07-06 10:53:14 +01:00
|
|
|
return render_template(
|
|
|
|
|
'views/broadcast/preview-message.html',
|
2020-07-09 10:33:50 +01:00
|
|
|
broadcast_message=broadcast_message,
|
2020-07-06 10:53:14 +01:00
|
|
|
)
|
2020-07-10 09:16:36 +01:00
|
|
|
|
|
|
|
|
|
2020-07-10 14:06:00 +01:00
|
|
|
@main.route('/services/<uuid:service_id>/broadcast/<uuid:broadcast_message_id>')
|
|
|
|
|
@user_has_permissions('send_messages')
|
|
|
|
|
@service_has_permission('broadcast')
|
|
|
|
|
def view_broadcast_message(service_id, broadcast_message_id):
|
|
|
|
|
broadcast_message = BroadcastMessage.from_id(
|
|
|
|
|
broadcast_message_id,
|
|
|
|
|
service_id=current_service.id,
|
|
|
|
|
)
|
|
|
|
|
if broadcast_message.status == 'draft':
|
|
|
|
|
abort(404)
|
|
|
|
|
return render_template(
|
|
|
|
|
'views/broadcast/view-message.html',
|
|
|
|
|
broadcast_message=broadcast_message,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
2020-07-10 09:16:36 +01:00
|
|
|
@main.route('/services/<uuid:service_id>/broadcast/<uuid:broadcast_message_id>/cancel')
|
|
|
|
|
@user_has_permissions('send_messages')
|
|
|
|
|
@service_has_permission('broadcast')
|
|
|
|
|
def cancel_broadcast_message(service_id, broadcast_message_id):
|
|
|
|
|
BroadcastMessage.from_id(
|
|
|
|
|
broadcast_message_id,
|
|
|
|
|
service_id=current_service.id,
|
|
|
|
|
).cancel_broadcast()
|
|
|
|
|
return redirect(url_for(
|
2020-07-10 14:22:06 +01:00
|
|
|
'.view_broadcast_message',
|
2020-07-10 09:16:36 +01:00
|
|
|
service_id=current_service.id,
|
2020-07-10 14:22:06 +01:00
|
|
|
broadcast_message_id=broadcast_message_id,
|
2020-07-10 09:16:36 +01:00
|
|
|
))
|