|
24 | 24 | from django.utils.translation import ugettext_lazy as _
|
25 | 25 | from django.views.generic import ListView, TemplateView, View
|
26 | 26 | from formtools.wizard.views import SessionWizardView
|
27 |
| -from vanilla import CreateView, DeleteView, DetailView, GenericView, UpdateView |
| 27 | +from vanilla import ( |
| 28 | + CreateView, |
| 29 | + DeleteView, |
| 30 | + DetailView, |
| 31 | + FormView, |
| 32 | + GenericView, |
| 33 | + UpdateView, |
| 34 | +) |
28 | 35 |
|
29 | 36 | from readthedocs.builds.forms import VersionForm
|
30 | 37 | from readthedocs.builds.models import Version
|
@@ -608,50 +615,50 @@ def project_translations_delete(request, project_slug, child_slug):
|
608 | 615 | return HttpResponseRedirect(project_dashboard)
|
609 | 616 |
|
610 | 617 |
|
611 |
| -@login_required |
612 |
| -def project_redirects(request, project_slug): |
| 618 | +class ProjectRedirectsMixin(ProjectAdminMixin, PrivateViewMixin): |
| 619 | + |
613 | 620 | """Project redirects view and form view."""
|
614 |
| - project = get_object_or_404( |
615 |
| - Project.objects.for_admin_user(request.user), |
616 |
| - slug=project_slug, |
617 |
| - ) |
618 | 621 |
|
619 |
| - form = RedirectForm(data=request.POST or None, project=project) |
| 622 | + model = EnvironmentVariable |
| 623 | + form_class = RedirectForm |
620 | 624 |
|
621 |
| - if request.method == 'POST' and form.is_valid(): |
| 625 | + def get_success_url(self): |
| 626 | + return reverse( |
| 627 | + 'projects_redirects', |
| 628 | + args=[self.get_project().slug], |
| 629 | + ) |
| 630 | + |
| 631 | + |
| 632 | +class ProjectRedirects(ProjectRedirectsMixin, FormView): |
| 633 | + |
| 634 | + template_name = 'projects/project_redirects.html' |
| 635 | + |
| 636 | + def form_valid(self, form): |
622 | 637 | form.save()
|
623 |
| - project_dashboard = reverse('projects_redirects', args=[project.slug]) |
624 |
| - return HttpResponseRedirect(project_dashboard) |
| 638 | + return HttpResponseRedirect(self.get_success_url()) |
625 | 639 |
|
626 |
| - redirects = project.redirects.all() |
| 640 | + def get_context_data(self, **kwargs): |
| 641 | + context = super().get_context_data(**kwargs) |
| 642 | + project = self.get_project() |
| 643 | + context['redirects'] = project.redirects.all() |
| 644 | + return context |
627 | 645 |
|
628 |
| - return render( |
629 |
| - request, |
630 |
| - 'projects/project_redirects.html', |
631 |
| - {'form': form, 'project': project, 'redirects': redirects}, |
632 |
| - ) |
633 | 646 |
|
| 647 | +class ProjectRedirectsDelete(ProjectRedirectsMixin, GenericView): |
634 | 648 |
|
635 |
| -@login_required |
636 |
| -def project_redirects_delete(request, project_slug): |
637 |
| - """Project redirect delete view.""" |
638 |
| - if request.method != 'POST': |
639 |
| - return HttpResponseNotAllowed('Only POST is allowed') |
640 |
| - project = get_object_or_404( |
641 |
| - Project.objects.for_admin_user(request.user), |
642 |
| - slug=project_slug, |
643 |
| - ) |
644 |
| - redirect = get_object_or_404( |
645 |
| - project.redirects, |
646 |
| - pk=request.POST.get('id_pk'), |
647 |
| - ) |
648 |
| - if redirect.project == project: |
649 |
| - redirect.delete() |
650 |
| - else: |
651 |
| - raise Http404 |
652 |
| - return HttpResponseRedirect( |
653 |
| - reverse('projects_redirects', args=[project.slug]), |
654 |
| - ) |
| 649 | + http_method_names = ['post'] |
| 650 | + |
| 651 | + def post(self, request, *args, **kwargs): |
| 652 | + project = self.get_project() |
| 653 | + redirect = get_object_or_404( |
| 654 | + project.redirects, |
| 655 | + pk=request.POST.get('id_pk'), |
| 656 | + ) |
| 657 | + if redirect.project == project: |
| 658 | + redirect.delete() |
| 659 | + else: |
| 660 | + raise Http404 |
| 661 | + return HttpResponseRedirect(self.get_success_url()) |
655 | 662 |
|
656 | 663 |
|
657 | 664 | @login_required
|
|
0 commit comments