@permission_required('django_spire_metric_visual_presentation.delete_slide')
def delete_slide_view(request: WSGIRequest, pk: int) -> TemplateResponse | HttpResponseRedirect:
slide = get_object_or_404(models.Slide.objects.select_related('presentation'), pk=pk)
presentation = slide.presentation
return_url = request.GET.get('return_url', _presentation_detail_url(presentation.pk))
if request.method == 'POST':
form = DeleteConfirmationForm(data=request.POST, obj=slide)
if form.is_valid():
if form.cleaned_data['should_delete']:
slide.set_deleted()
slide.add_activity(
user=request.user,
verb='deleted',
information=(
f'{request.user.get_full_name()} deleted slide "{slide}" from '
f'presentation "{presentation}".'
),
)
return HttpResponseRedirect(return_url)
else:
form = DeleteConfirmationForm(obj=slide)
nav = PresentationNavigation()
nav.page_title = 'Delete Slide'
nav.breadcrumbs.add('Presentations', 'django_spire:metric:visual:presentation:page:list')
nav.breadcrumbs.add(str(presentation), PRESENTATION_DETAIL_URL, {'pk': presentation.pk})
nav.breadcrumbs.add(str(slide))
nav.breadcrumbs.add('Delete')
context = nav.as_context()
context['form'] = form
context['form_title'] = f'Delete {slide}'
context['form_description'] = f'Are you sure you would like to delete slide "{slide}"?'
return TemplateResponse(
request, 'django_spire/page/delete_confirmation_form_page.html', context
)