2016-02-01 13:48:43 +00:00
|
|
|
|
from flask import request, render_template, redirect, url_for, flash, abort
|
2016-01-11 16:03:41 +00:00
|
|
|
|
from flask_login import login_required
|
2015-12-20 00:00:01 +00:00
|
|
|
|
|
2016-04-14 12:00:55 +01:00
|
|
|
|
from notifications_utils.template import Template
|
2016-04-29 09:38:59 +01:00
|
|
|
|
from notifications_python_client.errors import HTTPError
|
2016-04-12 09:55:51 +01:00
|
|
|
|
|
2015-12-20 00:00:01 +00:00
|
|
|
|
from app.main import main
|
2016-02-29 17:03:56 +00:00
|
|
|
|
from app.utils import user_has_permissions
|
2016-02-22 14:45:13 +00:00
|
|
|
|
from app.main.forms import SMSTemplateForm, EmailTemplateForm
|
2016-04-12 09:55:51 +01:00
|
|
|
|
from app import service_api_client, current_service
|
2016-01-13 16:21:29 +00:00
|
|
|
|
|
2015-12-20 00:00:01 +00:00
|
|
|
|
|
2016-02-22 14:45:13 +00:00
|
|
|
|
form_objects = {
|
|
|
|
|
|
'email': EmailTemplateForm,
|
|
|
|
|
|
'sms': SMSTemplateForm
|
|
|
|
|
|
}
|
2015-12-20 00:00:01 +00:00
|
|
|
|
|
2016-03-11 07:45:10 +00:00
|
|
|
|
page_headings = {
|
|
|
|
|
|
'email': 'email',
|
|
|
|
|
|
'sms': 'text message'
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2015-12-20 00:00:01 +00:00
|
|
|
|
|
2016-05-11 11:20:45 +01:00
|
|
|
|
@main.route("/services/<service_id>/templates/<template_id>")
|
2016-04-12 09:55:51 +01:00
|
|
|
|
@login_required
|
|
|
|
|
|
@user_has_permissions(
|
|
|
|
|
|
'view_activity',
|
|
|
|
|
|
'send_texts',
|
|
|
|
|
|
'send_emails',
|
|
|
|
|
|
'manage_templates',
|
|
|
|
|
|
'manage_api_keys',
|
|
|
|
|
|
admin_override=True, any_=True
|
|
|
|
|
|
)
|
|
|
|
|
|
def view_template(service_id, template_id):
|
|
|
|
|
|
return render_template(
|
|
|
|
|
|
'views/templates/template.html',
|
|
|
|
|
|
template=Template(
|
|
|
|
|
|
service_api_client.get_service_template(service_id, template_id)['data'],
|
|
|
|
|
|
prefix=current_service['name']
|
|
|
|
|
|
)
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-05-11 11:20:45 +01:00
|
|
|
|
@main.route("/services/<service_id>/templates/<template_id>/version/<int:version>")
|
|
|
|
|
|
@login_required
|
|
|
|
|
|
@user_has_permissions(
|
|
|
|
|
|
'view_activity',
|
|
|
|
|
|
'send_texts',
|
|
|
|
|
|
'send_emails',
|
|
|
|
|
|
'manage_templates',
|
|
|
|
|
|
'manage_api_keys',
|
|
|
|
|
|
admin_override=True,
|
|
|
|
|
|
any_=True
|
|
|
|
|
|
)
|
|
|
|
|
|
def view_template_version(service_id, template_id, version):
|
|
|
|
|
|
return render_template(
|
|
|
|
|
|
'views/templates/template_history.html',
|
|
|
|
|
|
template=Template(
|
|
|
|
|
|
service_api_client.get_service_template(service_id, template_id, version)['data'],
|
|
|
|
|
|
prefix=current_service['name']
|
|
|
|
|
|
)
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-02-22 14:45:13 +00:00
|
|
|
|
@main.route("/services/<service_id>/templates/add-<template_type>", methods=['GET', 'POST'])
|
2016-01-11 16:03:41 +00:00
|
|
|
|
@login_required
|
2016-03-17 10:46:47 +00:00
|
|
|
|
@user_has_permissions('manage_templates', admin_override=True)
|
2016-02-22 14:45:13 +00:00
|
|
|
|
def add_service_template(service_id, template_type):
|
|
|
|
|
|
if template_type not in ['sms', 'email']:
|
|
|
|
|
|
abort(404)
|
|
|
|
|
|
|
|
|
|
|
|
form = form_objects[template_type]()
|
2016-01-19 15:54:12 +00:00
|
|
|
|
if form.validate_on_submit():
|
2016-04-29 09:38:59 +01:00
|
|
|
|
try:
|
|
|
|
|
|
service_api_client.create_service_template(
|
|
|
|
|
|
form.name.data,
|
|
|
|
|
|
template_type,
|
|
|
|
|
|
form.template_content.data,
|
|
|
|
|
|
service_id,
|
|
|
|
|
|
form.subject.data if hasattr(form, 'subject') else None
|
|
|
|
|
|
)
|
|
|
|
|
|
except HTTPError as e:
|
|
|
|
|
|
if e.status_code == 400:
|
|
|
|
|
|
if 'content' in e.message and any(['character count greater than' in x for x in e.message['content']]):
|
|
|
|
|
|
form.template_content.errors.extend(e.message['content'])
|
|
|
|
|
|
else:
|
|
|
|
|
|
raise e
|
|
|
|
|
|
else:
|
|
|
|
|
|
raise e
|
|
|
|
|
|
else:
|
|
|
|
|
|
return redirect(
|
|
|
|
|
|
url_for('.choose_template', service_id=service_id, template_type=template_type)
|
|
|
|
|
|
)
|
2016-02-22 14:45:13 +00:00
|
|
|
|
|
2016-01-19 15:54:12 +00:00
|
|
|
|
return render_template(
|
2016-02-22 14:45:13 +00:00
|
|
|
|
'views/edit-{}-template.html'.format(template_type),
|
2016-01-19 15:54:12 +00:00
|
|
|
|
form=form,
|
2016-02-22 14:45:13 +00:00
|
|
|
|
template_type=template_type,
|
2016-03-11 07:45:10 +00:00
|
|
|
|
heading_action='Add'
|
2016-02-22 14:45:13 +00:00
|
|
|
|
)
|
2015-12-20 00:00:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
2016-04-12 09:55:51 +01:00
|
|
|
|
@main.route("/services/<service_id>/templates/<template_id>/edit", methods=['GET', 'POST'])
|
2016-01-11 16:03:41 +00:00
|
|
|
|
@login_required
|
2016-03-17 10:46:47 +00:00
|
|
|
|
@user_has_permissions('manage_templates', admin_override=True)
|
2016-01-19 15:54:12 +00:00
|
|
|
|
def edit_service_template(service_id, template_id):
|
2016-03-30 10:23:39 +01:00
|
|
|
|
template = service_api_client.get_service_template(service_id, template_id)['data']
|
2016-01-22 12:15:47 +00:00
|
|
|
|
template['template_content'] = template['content']
|
2016-02-22 14:45:13 +00:00
|
|
|
|
form = form_objects[template['template_type']](**template)
|
2016-01-11 13:15:10 +00:00
|
|
|
|
|
2016-01-19 15:54:12 +00:00
|
|
|
|
if form.validate_on_submit():
|
2016-04-29 09:38:59 +01:00
|
|
|
|
try:
|
|
|
|
|
|
service_api_client.update_service_template(
|
|
|
|
|
|
template_id,
|
|
|
|
|
|
form.name.data,
|
|
|
|
|
|
template['template_type'],
|
|
|
|
|
|
form.template_content.data,
|
|
|
|
|
|
service_id,
|
|
|
|
|
|
form.subject.data if getattr(form, 'subject', None) else None
|
|
|
|
|
|
)
|
|
|
|
|
|
except HTTPError as e:
|
|
|
|
|
|
if e.status_code == 400:
|
|
|
|
|
|
if 'content' in e.message and any(['character count greater than' in x for x in e.message['content']]):
|
|
|
|
|
|
form.template_content.errors.extend(e.message['content'])
|
|
|
|
|
|
else:
|
|
|
|
|
|
raise e
|
|
|
|
|
|
else:
|
|
|
|
|
|
raise e
|
|
|
|
|
|
else:
|
|
|
|
|
|
return redirect(url_for(
|
|
|
|
|
|
'.choose_template',
|
|
|
|
|
|
service_id=service_id,
|
|
|
|
|
|
template_type=template['template_type']
|
|
|
|
|
|
))
|
2016-01-19 15:54:12 +00:00
|
|
|
|
return render_template(
|
2016-02-22 14:45:13 +00:00
|
|
|
|
'views/edit-{}-template.html'.format(template['template_type']),
|
2016-01-19 15:54:12 +00:00
|
|
|
|
form=form,
|
2016-02-22 14:45:13 +00:00
|
|
|
|
template_id=template_id,
|
2016-03-11 07:45:10 +00:00
|
|
|
|
template_type=template['template_type'],
|
|
|
|
|
|
heading_action='Edit'
|
2016-02-22 14:45:13 +00:00
|
|
|
|
)
|
2016-01-14 09:44:06 +00:00
|
|
|
|
|
|
|
|
|
|
|
2016-04-12 14:19:51 +01:00
|
|
|
|
@main.route("/services/<service_id>/templates/<template_id>/delete", methods=['GET', 'POST'])
|
2016-01-14 09:44:06 +00:00
|
|
|
|
@login_required
|
2016-03-17 10:46:47 +00:00
|
|
|
|
@user_has_permissions('manage_templates', admin_override=True)
|
2016-01-19 15:54:12 +00:00
|
|
|
|
def delete_service_template(service_id, template_id):
|
2016-03-30 10:23:39 +01:00
|
|
|
|
template = service_api_client.get_service_template(service_id, template_id)['data']
|
2016-01-14 09:44:06 +00:00
|
|
|
|
|
2016-01-22 11:36:49 +00:00
|
|
|
|
if request.method == 'POST':
|
2016-03-30 10:23:39 +01:00
|
|
|
|
service_api_client.delete_service_template(service_id, template_id)
|
2016-02-22 14:45:13 +00:00
|
|
|
|
return redirect(url_for(
|
|
|
|
|
|
'.choose_template',
|
|
|
|
|
|
service_id=service_id,
|
|
|
|
|
|
template_type=template['template_type']
|
|
|
|
|
|
))
|
2016-01-14 09:44:06 +00:00
|
|
|
|
|
2016-02-08 16:36:53 +00:00
|
|
|
|
template['template_content'] = template['content']
|
2016-02-22 14:45:13 +00:00
|
|
|
|
form = form_objects[template['template_type']](**template)
|
2016-01-19 15:54:12 +00:00
|
|
|
|
flash('Are you sure you want to delete ‘{}’?'.format(form.name.data), 'delete')
|
|
|
|
|
|
return render_template(
|
2016-02-22 14:45:13 +00:00
|
|
|
|
'views/edit-{}-template.html'.format(template['template_type']),
|
2016-01-19 15:54:12 +00:00
|
|
|
|
h1='Edit template',
|
|
|
|
|
|
form=form,
|
|
|
|
|
|
template_id=template_id)
|
2016-05-11 11:20:45 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@main.route('/services/<service_id>/templates/<template_id>/versions')
|
|
|
|
|
|
@login_required
|
|
|
|
|
|
@user_has_permissions(
|
|
|
|
|
|
'view_activity',
|
|
|
|
|
|
'send_texts',
|
|
|
|
|
|
'send_emails',
|
|
|
|
|
|
'manage_templates',
|
|
|
|
|
|
'manage_api_keys',
|
|
|
|
|
|
admin_override=True,
|
|
|
|
|
|
any_=True
|
|
|
|
|
|
)
|
|
|
|
|
|
def view_template_versions(service_id, template_id):
|
|
|
|
|
|
return render_template(
|
|
|
|
|
|
'views/templates/choose_history.html',
|
|
|
|
|
|
template=Template(
|
|
|
|
|
|
service_api_client.get_service_template(service_id, template_id)['data'],
|
|
|
|
|
|
prefix=current_service['name']
|
|
|
|
|
|
),
|
|
|
|
|
|
versions=[
|
|
|
|
|
|
Template(
|
|
|
|
|
|
template,
|
|
|
|
|
|
prefix=current_service['name']
|
|
|
|
|
|
) for template in service_api_client.get_service_template_versions(service_id, template_id)['data']
|
|
|
|
|
|
]
|
|
|
|
|
|
)
|