mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-04-30 22:21:16 -04:00
Add update_letter_branding view function
This works in a similar way to the create_letter_branding view function, but with a few minor differences: * Since we already have a file, uploading a file is no longer required (since we can just use the current file if a new one is not uploaded) * We save the changes in the database, then upload the new files to S3. If saving to S3 raises an error, we now rollback the database changes to prevent any errors when trying to view letters with the original logo.
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
from botocore.exceptions import ClientError as BotoClientError
|
||||
from flask import (
|
||||
current_app,
|
||||
redirect,
|
||||
@@ -45,6 +46,92 @@ def letter_branding():
|
||||
)
|
||||
|
||||
|
||||
@main.route("/letter-branding/<branding_id>/edit", methods=['GET', 'POST'])
|
||||
@main.route("/letter-branding/<branding_id>/edit/<path:logo>", methods=['GET', 'POST'])
|
||||
@login_required
|
||||
@user_is_platform_admin
|
||||
def update_letter_branding(branding_id, logo=None):
|
||||
letter_branding = letter_branding_client.get_letter_branding(branding_id)
|
||||
|
||||
file_upload_form = SVGFileUpload()
|
||||
letter_branding_details_form = ServiceLetterBrandingDetails(
|
||||
name=letter_branding['name'],
|
||||
domain=letter_branding['domain']
|
||||
)
|
||||
|
||||
file_upload_form_submitted = file_upload_form.file.data
|
||||
details_form_submitted = request.form.get('operation') == 'branding-details'
|
||||
|
||||
logo = logo if logo else permanent_letter_logo_name(letter_branding['filename'], 'svg')
|
||||
|
||||
if file_upload_form_submitted and file_upload_form.validate_on_submit():
|
||||
upload_filename = upload_letter_temp_logo(
|
||||
file_upload_form.file.data.filename,
|
||||
file_upload_form.file.data,
|
||||
current_app.config['AWS_REGION'],
|
||||
user_id=session["user_id"]
|
||||
)
|
||||
|
||||
if logo.startswith(LETTER_TEMP_TAG.format(user_id=session['user_id'])):
|
||||
delete_letter_temp_file(logo)
|
||||
|
||||
return redirect(url_for('.update_letter_branding', branding_id=branding_id, logo=upload_filename))
|
||||
|
||||
if details_form_submitted and letter_branding_details_form.validate_on_submit():
|
||||
db_filename = letter_filename_for_db(logo, session['user_id'])
|
||||
|
||||
try:
|
||||
if db_filename == letter_branding['filename']:
|
||||
|
||||
letter_branding_client.update_letter_branding(
|
||||
branding_id=branding_id,
|
||||
filename=db_filename,
|
||||
name=letter_branding_details_form.name.data,
|
||||
domain=letter_branding_details_form.domain.data
|
||||
)
|
||||
|
||||
return redirect(url_for('main.letter_branding'))
|
||||
else:
|
||||
png_file = get_png_file_from_svg(logo)
|
||||
|
||||
letter_branding_client.update_letter_branding(
|
||||
branding_id=branding_id,
|
||||
filename=db_filename,
|
||||
name=letter_branding_details_form.name.data,
|
||||
domain=letter_branding_details_form.domain.data
|
||||
)
|
||||
|
||||
upload_letter_logos(logo, db_filename, png_file, session['user_id'])
|
||||
|
||||
return redirect(url_for('main.letter_branding'))
|
||||
|
||||
except HTTPError as e:
|
||||
if 'domain' in e.message:
|
||||
letter_branding_details_form.domain.errors.append(e.message['domain'][0])
|
||||
elif 'name' in e.message:
|
||||
letter_branding_details_form.name.errors.append(e.message['name'][0])
|
||||
else:
|
||||
raise e
|
||||
except BotoClientError:
|
||||
# we had a problem saving the file - rollback the db changes
|
||||
letter_branding_client.update_letter_branding(
|
||||
branding_id=branding_id,
|
||||
filename=letter_branding['filename'],
|
||||
name=letter_branding['name'],
|
||||
domain=letter_branding['domain']
|
||||
)
|
||||
file_upload_form.file.errors = ['Error saving uploaded file - try uploading again']
|
||||
|
||||
return render_template(
|
||||
'views/letter-branding/manage-letter-branding.html',
|
||||
file_upload_form=file_upload_form,
|
||||
letter_branding_details_form=letter_branding_details_form,
|
||||
cdn_url=get_logo_cdn_domain(),
|
||||
logo=logo,
|
||||
is_update=True
|
||||
)
|
||||
|
||||
|
||||
@main.route("/letter-branding/create", methods=['GET', 'POST'])
|
||||
@main.route("/letter-branding/create/<path:logo>", methods=['GET', 'POST'])
|
||||
@login_required
|
||||
|
||||
@@ -88,6 +88,7 @@ class HeaderNavigation(Navigation):
|
||||
'suspend_service',
|
||||
'trial_services',
|
||||
'update_email_branding',
|
||||
'update_letter_branding',
|
||||
'user_information',
|
||||
'view_provider',
|
||||
'view_providers',
|
||||
@@ -499,6 +500,7 @@ class MainNavigation(Navigation):
|
||||
'two_factor_email',
|
||||
'two_factor_email_sent',
|
||||
'update_email_branding',
|
||||
'update_letter_branding',
|
||||
'user_information',
|
||||
'user_profile',
|
||||
'user_profile_email',
|
||||
@@ -731,6 +733,7 @@ class CaseworkNavigation(Navigation):
|
||||
'two_factor_email',
|
||||
'two_factor_email_sent',
|
||||
'update_email_branding',
|
||||
'update_letter_branding',
|
||||
'usage',
|
||||
'user_information',
|
||||
'user_profile',
|
||||
@@ -964,6 +967,7 @@ class OrgNavigation(Navigation):
|
||||
'two_factor_email',
|
||||
'two_factor_email_sent',
|
||||
'update_email_branding',
|
||||
'update_letter_branding',
|
||||
'usage',
|
||||
'user_information',
|
||||
'user_profile',
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
{% from "components/form.html" import form_wrapper %}
|
||||
|
||||
{% block per_page_title %}
|
||||
Create letter branding
|
||||
{{ '{} letter branding'.format('Update' if is_update else 'Create')}}
|
||||
{% endblock %}
|
||||
|
||||
{% block platform_admin_content %}
|
||||
|
||||
<h1 class="heading-large">Add letter branding</h1>
|
||||
<h1 class="heading-large">{{ '{} letter branding'.format('Update' if is_update else 'Add')}}</h1>
|
||||
<div class="grid-row">
|
||||
<div class="column-three-quarters">
|
||||
{% if logo %}
|
||||
@@ -18,7 +18,7 @@
|
||||
<img src="https://{{ cdn_url }}/{{ logo }}"/>
|
||||
</div>
|
||||
{% endif %}
|
||||
{{ file_upload(file_upload_form.file) }}
|
||||
{{ file_upload(file_upload_form.file, button_text='{} logo'.format('Update' if is_update else 'Upload')) }}
|
||||
{% call form_wrapper() %}
|
||||
<div class="form-group">
|
||||
<div style='margin-top:15px;'>{{textbox(letter_branding_details_form.name)}}</div>
|
||||
|
||||
@@ -20,7 +20,9 @@
|
||||
{% for brand in letter_brandings %}
|
||||
<div class="letter-brand">
|
||||
<div class="message-name">
|
||||
{{ brand.name }}
|
||||
<a href="{{ url_for('.update_letter_branding', branding_id=brand.id) }}">
|
||||
{{ brand.name }}
|
||||
</a>
|
||||
</div>
|
||||
<p class="message-type">
|
||||
{% if brand.domain %}
|
||||
|
||||
Reference in New Issue
Block a user