mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-07-19 05:53:51 -04:00
Post to the API when moving folders and templates
This commit adds logic to: - take the list of selected folders and templates - split it into two lists (of folders and templates) - `POST` that data to the API, to effect the movement of said folders and templates I’ve tried to architect it in such a way that we can easily add more template ‘operations’ in the future, as we add more forms to the choose template page.
This commit is contained in:
@@ -702,7 +702,7 @@ class ServicePostageForm(StripWhitespaceForm):
|
||||
)
|
||||
|
||||
|
||||
class BrandingStyle(RadioField):
|
||||
class RadioFieldWithNoneOption(RadioField):
|
||||
|
||||
def post_validate(self, form, validation_stopped):
|
||||
if self.data == 'None':
|
||||
@@ -711,7 +711,7 @@ class BrandingStyle(RadioField):
|
||||
|
||||
class ServiceSetBranding(StripWhitespaceForm):
|
||||
|
||||
branding_style = BrandingStyle(
|
||||
branding_style = RadioFieldWithNoneOption(
|
||||
'Branding style',
|
||||
validators=[
|
||||
DataRequired()
|
||||
@@ -1124,7 +1124,7 @@ class TemplateAndFoldersSelectionForm(Form):
|
||||
|
||||
ALL_TEMPLATES_FOLDER = {
|
||||
'name': 'All templates',
|
||||
'id': None,
|
||||
'id': 'None',
|
||||
}
|
||||
|
||||
def __init__(
|
||||
@@ -1151,8 +1151,8 @@ class TemplateAndFoldersSelectionForm(Form):
|
||||
def ids_and_names(items, exclude=None):
|
||||
return [
|
||||
(item['id'], item['name']) for item in items
|
||||
if item['id'] != exclude
|
||||
if item['id'] != str(exclude)
|
||||
]
|
||||
|
||||
templates_and_folders = MultiCheckboxField('Choose templates or folders')
|
||||
move_to = RadioField('Choose a folder')
|
||||
move_to = RadioFieldWithNoneOption('Choose a folder')
|
||||
|
||||
@@ -100,10 +100,10 @@ def start_tour(service_id, template_id):
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/templates")
|
||||
@main.route("/services/<service_id>/templates/folders/<template_folder_id>")
|
||||
@main.route("/services/<service_id>/templates/<template_type>")
|
||||
@main.route("/services/<service_id>/templates/<template_type>/folders/<template_folder_id>")
|
||||
@main.route("/services/<service_id>/templates", methods=['GET', 'POST'])
|
||||
@main.route("/services/<service_id>/templates/folders/<template_folder_id>", methods=['GET', 'POST'])
|
||||
@main.route("/services/<service_id>/templates/<template_type>", methods=['GET', 'POST'])
|
||||
@main.route("/services/<service_id>/templates/<template_type>/folders/<template_folder_id>", methods=['GET', 'POST'])
|
||||
@login_required
|
||||
@user_has_permissions()
|
||||
def choose_template(service_id, template_type='all', template_folder_id=None):
|
||||
@@ -114,13 +114,17 @@ def choose_template(service_id, template_type='all', template_folder_id=None):
|
||||
current_folder_id=template_folder_id,
|
||||
)
|
||||
|
||||
if template_operation('move', templates_and_folders_form):
|
||||
current_service.move_to_folder(
|
||||
ids_to_move=templates_and_folders_form.templates_and_folders.data,
|
||||
move_to=templates_and_folders_form.move_to.data,
|
||||
)
|
||||
return redirect(request.url)
|
||||
|
||||
return render_template(
|
||||
'views/templates/choose.html',
|
||||
current_template_folder_id=template_folder_id,
|
||||
can_manage_folders=(
|
||||
current_service.has_permission('edit_folders') and
|
||||
current_user.has_permissions('manage_templates')
|
||||
),
|
||||
can_manage_folders=can_manage_folders(),
|
||||
template_folder_path=current_service.get_template_folder_path(template_folder_id),
|
||||
template_folders=current_service.get_template_folders(template_folder_id),
|
||||
templates=current_service.get_templates(template_type, template_folder_id),
|
||||
@@ -136,6 +140,17 @@ def choose_template(service_id, template_type='all', template_folder_id=None):
|
||||
)
|
||||
|
||||
|
||||
def template_operation(operation_name, form):
|
||||
|
||||
if (
|
||||
can_manage_folders() and
|
||||
request.method == 'POST' and
|
||||
request.form.get('operation') == operation_name and
|
||||
form.validate_on_submit()
|
||||
):
|
||||
return True
|
||||
|
||||
|
||||
def get_template_nav_items(template_folder_id):
|
||||
return [
|
||||
(
|
||||
@@ -151,6 +166,13 @@ def get_template_nav_items(template_folder_id):
|
||||
]
|
||||
|
||||
|
||||
def can_manage_folders():
|
||||
return (
|
||||
current_service.has_permission('edit_folders') and
|
||||
current_user.has_permissions('manage_templates')
|
||||
)
|
||||
|
||||
|
||||
@main.route("/services/<service_id>/templates/<template_id>.<filetype>")
|
||||
@login_required
|
||||
@user_has_permissions()
|
||||
|
||||
@@ -331,3 +331,14 @@ class Service():
|
||||
self.get_templates(template_type, template_folder_id) +
|
||||
self.get_template_folders(template_folder_id)
|
||||
)
|
||||
|
||||
def move_to_folder(self, ids_to_move, move_to):
|
||||
|
||||
ids_to_move = set(ids_to_move)
|
||||
|
||||
template_folder_api_client.move_to_folder(
|
||||
service_id=self.id,
|
||||
folder_id=move_to,
|
||||
template_ids=ids_to_move & self.all_template_ids,
|
||||
folder_ids=ids_to_move & self.all_template_folder_ids,
|
||||
)
|
||||
|
||||
@@ -24,5 +24,24 @@ class TemplateFolderAPIClient(NotifyAdminAPIClient):
|
||||
def get_template_folders(self, service_id):
|
||||
return self.get('/service/{}/template-folder'.format(service_id))['template_folders']
|
||||
|
||||
@cache.delete('service-{service_id}-template-folders')
|
||||
@cache.delete('service-{service_id}-templates')
|
||||
def move_to_folder(self, service_id, folder_id, template_ids, folder_ids):
|
||||
|
||||
if folder_id:
|
||||
url = '/service/{}/template-folder/move-to-folder/{}'.format(service_id, folder_id)
|
||||
else:
|
||||
url = '/service/{}/template-folder/move-to-folder'.format(service_id)
|
||||
|
||||
self.post(url, {
|
||||
'templates': list(template_ids),
|
||||
'folders': list(folder_ids),
|
||||
})
|
||||
|
||||
self.redis_client.delete(*map(
|
||||
'template-{}-version-None'.format,
|
||||
template_ids,
|
||||
))
|
||||
|
||||
|
||||
template_folder_api_client = TemplateFolderAPIClient()
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
<button
|
||||
type="submit"
|
||||
class="button{% if destructive %}-destructive{% endif %}"
|
||||
{% if button_name %}name="{{ button_name }}"{% endif %}
|
||||
{% if button_value %}value="{{ button_value }}"{% endif %}
|
||||
>
|
||||
{{- button_text -}}
|
||||
</button>
|
||||
|
||||
Reference in New Issue
Block a user