kopia lustrzana https://github.com/wagtail/wagtail
Move 'create' form handling into its own view that only renders that one tab
rodzic
5ce89f11ff
commit
d8b81df487
|
@ -131,6 +131,10 @@ const TASK_CHOOSER_MODAL_ONLOAD_HANDLERS = {
|
|||
task_chosen(modal, jsonData) {
|
||||
modal.respond('taskChosen', jsonData.result);
|
||||
modal.close();
|
||||
},
|
||||
reshow_create_tab(modal, jsonData) {
|
||||
$('#new', modal.body).html(jsonData.htmlFragment);
|
||||
ajaxifyTaskCreateTab(modal, jsonData);
|
||||
}
|
||||
};
|
||||
window.TASK_CHOOSER_MODAL_ONLOAD_HANDLERS = TASK_CHOOSER_MODAL_ONLOAD_HANDLERS;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
{{ form.media.js }}
|
||||
|
||||
{% if task_types|length > 1 %}
|
||||
<a href="{% url 'wagtailadmin_workflows:task_chooser' %}" class="choose-different-task-type">{% trans "Choose a different task type" %}</a>
|
||||
<a href="{% url 'wagtailadmin_workflows:task_chooser_create' %}" class="choose-different-task-type">{% trans "Choose a different task type" %}</a>
|
||||
{% endif %}
|
||||
|
||||
<form class="task-create no-float-elements" action="{{ add_url }}" enctype="multipart/form-data" method="POST" novalidate>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<li>
|
||||
<div class="row row-flush">
|
||||
<div class="col6">
|
||||
<a href="{% url 'wagtailadmin_workflows:task_chooser' %}?create_model={{ app_label|urlencode }}.{{ model_name|urlencode }}" class="icon icon-plus-inverse icon-larger task-type-choice">{{ verbose_name }}</a>
|
||||
<a href="{% url 'wagtailadmin_workflows:task_chooser_create' %}?create_model={{ app_label|urlencode }}.{{ model_name|urlencode }}" class="icon icon-plus-inverse icon-larger task-type-choice">{{ verbose_name }}</a>
|
||||
</div>
|
||||
<div class="col6">
|
||||
{{ description }}
|
||||
|
|
|
@ -1633,24 +1633,22 @@ class TestTaskChooserView(TestCase, WagtailTestUtils):
|
|||
self.assertFalse(response.context['searchform'].is_searching())
|
||||
|
||||
def test_get_with_create_model_selected(self):
|
||||
response = self.client.get(reverse('wagtailadmin_workflows:task_chooser') + '?create_model=wagtailcore.GroupApprovalTask')
|
||||
response = self.client.get(reverse('wagtailadmin_workflows:task_chooser_create') + '?create_model=wagtailcore.GroupApprovalTask')
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
self.assertTemplateUsed(response, "wagtailadmin/workflows/task_chooser/chooser.html")
|
||||
|
||||
# Check that the "create" view was shown in the "new" tab
|
||||
# Check that the "create" view was returned
|
||||
self.assertTemplateUsed(response, "wagtailadmin/workflows/task_chooser/includes/create_form.html")
|
||||
self.assertTemplateNotUsed(response, "wagtailadmin/workflows/task_chooser/includes/select_task_type.html")
|
||||
|
||||
def test_get_with_non_task_create_model_selected(self):
|
||||
response = self.client.get(reverse('wagtailadmin_workflows:task_chooser') + '?create_model=wagtailcore.Page')
|
||||
response = self.client.get(reverse('wagtailadmin_workflows:task_chooser_create') + '?create_model=wagtailcore.Page')
|
||||
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_get_with_base_task_create_model_selected(self):
|
||||
# Task is technically a subclass of itself so we need an extra test for it
|
||||
response = self.client.get(reverse('wagtailadmin_workflows:task_chooser') + '?create_model=wagtailcore.Task')
|
||||
response = self.client.get(reverse('wagtailadmin_workflows:task_chooser_create') + '?create_model=wagtailcore.Task')
|
||||
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
|
@ -1678,7 +1676,7 @@ class TestTaskChooserView(TestCase, WagtailTestUtils):
|
|||
}
|
||||
|
||||
def test_post_with_create_model_selected(self):
|
||||
response = self.client.post(reverse('wagtailadmin_workflows:task_chooser') + '?create_model=wagtailcore.GroupApprovalTask', self.get_post_data())
|
||||
response = self.client.post(reverse('wagtailadmin_workflows:task_chooser_create') + '?create_model=wagtailcore.GroupApprovalTask', self.get_post_data())
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
@ -1700,7 +1698,7 @@ class TestTaskChooserView(TestCase, WagtailTestUtils):
|
|||
# When a single task type exists there's no need to specify create_model
|
||||
get_task_types.return_value = [GroupApprovalTask]
|
||||
|
||||
response = self.client.post(reverse('wagtailadmin_workflows:task_chooser'), self.get_post_data())
|
||||
response = self.client.post(reverse('wagtailadmin_workflows:task_chooser_create'), self.get_post_data())
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
@ -1718,7 +1716,7 @@ class TestTaskChooserView(TestCase, WagtailTestUtils):
|
|||
})
|
||||
|
||||
def test_post_without_create_model_selected(self):
|
||||
response = self.client.post(reverse('wagtailadmin_workflows:task_chooser'), self.get_post_data())
|
||||
response = self.client.post(reverse('wagtailadmin_workflows:task_chooser_create'), self.get_post_data())
|
||||
|
||||
self.assertEqual(response.status_code, 400)
|
||||
|
||||
|
@ -1726,7 +1724,7 @@ class TestTaskChooserView(TestCase, WagtailTestUtils):
|
|||
self.assertFalse(Task.objects.filter(name="Editor approval task", active=True).exists())
|
||||
|
||||
def test_post_with_non_task_create_model_selected(self):
|
||||
response = self.client.post(reverse('wagtailadmin_workflows:task_chooser') + '?create_model=wagtailcore.Page', self.get_post_data())
|
||||
response = self.client.post(reverse('wagtailadmin_workflows:task_chooser_create') + '?create_model=wagtailcore.Page', self.get_post_data())
|
||||
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
|
@ -1735,7 +1733,7 @@ class TestTaskChooserView(TestCase, WagtailTestUtils):
|
|||
|
||||
def test_post_with_base_task_create_model_selected(self):
|
||||
# Task is technically a subclass of itself so we need an extra test for it
|
||||
response = self.client.post(reverse('wagtailadmin_workflows:task_chooser') + '?create_model=wagtailcore.Task', self.get_post_data())
|
||||
response = self.client.post(reverse('wagtailadmin_workflows:task_chooser_create') + '?create_model=wagtailcore.Task', self.get_post_data())
|
||||
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
|
|
|
@ -21,5 +21,6 @@ urlpatterns = [
|
|||
path('tasks/enable/<int:pk>/', workflows.enable_task, name='enable_task'),
|
||||
path('task_chooser/', workflows.TaskChooserView.as_view(), name='task_chooser'),
|
||||
path('task_chooser/results/', workflows.TaskChooserResultsView.as_view(), name='task_chooser_results'),
|
||||
path('task_chooser/create/', workflows.TaskChooserCreateView.as_view(), name='task_chooser_create'),
|
||||
path('task_chooser/<int:task_id>/', workflows.task_chosen, name='task_chosen'),
|
||||
]
|
||||
|
|
|
@ -5,6 +5,7 @@ from django.db import transaction
|
|||
from django.db.models.functions import Lower
|
||||
from django.http import Http404, HttpResponseBadRequest
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.template.loader import render_to_string
|
||||
from django.template.response import TemplateResponse
|
||||
from django.urls import reverse
|
||||
from django.utils.functional import cached_property
|
||||
|
@ -560,6 +561,12 @@ class BaseTaskChooserView(View):
|
|||
task_type_choices.sort(key=lambda task_type: task_type[1].lower())
|
||||
return task_type_choices
|
||||
|
||||
def get_form_js_context(self):
|
||||
return {
|
||||
'error_label': _("Server Error"),
|
||||
'error_message': _("Report this error to your webmaster with the following information:"),
|
||||
}
|
||||
|
||||
|
||||
class TaskChooserView(BaseTaskChooserView):
|
||||
def get(self, request):
|
||||
|
@ -571,6 +578,43 @@ class TaskChooserView(BaseTaskChooserView):
|
|||
|
||||
return self.render_to_response()
|
||||
|
||||
def render_to_response(self):
|
||||
searchform = TaskChooserSearchForm(task_type_choices=self.get_task_type_filter_choices())
|
||||
tasks = searchform.task_model.objects.filter(active=True).order_by(Lower('name'))
|
||||
|
||||
paginator = Paginator(tasks, per_page=10)
|
||||
tasks = paginator.get_page(self.request.GET.get('p'))
|
||||
|
||||
chooser_html_context = {
|
||||
'tasks': tasks,
|
||||
'searchform': searchform,
|
||||
'createform': self.createform,
|
||||
'can_create': self.can_create,
|
||||
'add_url': reverse('wagtailadmin_workflows:task_chooser_create') + '?' + self.request.GET.urlencode() if self.create_model else None
|
||||
}
|
||||
|
||||
if not self.createform:
|
||||
chooser_html_context['task_types'] = self.get_task_type_options()
|
||||
|
||||
js_context = self.get_form_js_context()
|
||||
js_context['step'] = 'chooser'
|
||||
|
||||
return render_modal_workflow(
|
||||
self.request, 'wagtailadmin/workflows/task_chooser/chooser.html', None,
|
||||
chooser_html_context, json_data=js_context
|
||||
)
|
||||
|
||||
|
||||
class TaskChooserCreateView(BaseTaskChooserView):
|
||||
def get(self, request):
|
||||
create_form_class = self.get_create_form_class()
|
||||
if create_form_class:
|
||||
self.createform = create_form_class(prefix='create-task')
|
||||
else:
|
||||
self.createform = None
|
||||
|
||||
return self.render_to_response()
|
||||
|
||||
def post(self, request):
|
||||
create_form_class = self.get_create_form_class()
|
||||
if not create_form_class:
|
||||
|
@ -585,32 +629,24 @@ class TaskChooserView(BaseTaskChooserView):
|
|||
return self.render_to_response()
|
||||
|
||||
def render_to_response(self):
|
||||
searchform = TaskChooserSearchForm(task_type_choices=self.get_task_type_filter_choices())
|
||||
tasks = searchform.task_model.objects.filter(active=True).order_by(Lower('name'))
|
||||
if self.createform:
|
||||
tab_html = render_to_string("wagtailadmin/workflows/task_chooser/includes/create_form.html", {
|
||||
'form': self.createform,
|
||||
'add_url': reverse('wagtailadmin_workflows:task_chooser_create') + '?' + self.request.GET.urlencode() if self.create_model else None,
|
||||
'task_types': self.get_task_type_options(),
|
||||
}, self.request)
|
||||
else:
|
||||
tab_html = render_to_string("wagtailadmin/workflows/task_chooser/includes/select_task_type.html", {
|
||||
'task_types': self.get_task_type_options(),
|
||||
}, self.request)
|
||||
|
||||
paginator = Paginator(tasks, per_page=10)
|
||||
tasks = paginator.get_page(self.request.GET.get('p'))
|
||||
|
||||
chooser_html_context = {
|
||||
'tasks': tasks,
|
||||
'searchform': searchform,
|
||||
'createform': self.createform,
|
||||
'can_create': self.can_create,
|
||||
'add_url': reverse('wagtailadmin_workflows:task_chooser') + '?' + self.request.GET.urlencode() if self.create_model else None
|
||||
}
|
||||
|
||||
if not self.createform:
|
||||
chooser_html_context['task_types'] = self.get_task_type_options()
|
||||
|
||||
chooser_js_context = {
|
||||
'step': 'chooser',
|
||||
'error_label': _("Server Error"),
|
||||
'error_message': _("Report this error to your webmaster with the following information:"),
|
||||
}
|
||||
js_context = self.get_form_js_context()
|
||||
js_context['step'] = 'reshow_create_tab'
|
||||
js_context['htmlFragment'] = tab_html
|
||||
|
||||
return render_modal_workflow(
|
||||
self.request, 'wagtailadmin/workflows/task_chooser/chooser.html', None,
|
||||
chooser_html_context, json_data=chooser_js_context
|
||||
self.request, None, None, None,
|
||||
json_data=js_context
|
||||
)
|
||||
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue