|
@@ -11,9 +11,11 @@ from django.views.decorators.vary import vary_on_headers
|
|
|
from wagtail.admin import messages
|
|
|
from wagtail.admin.auth import any_permission_required, permission_required
|
|
|
from wagtail.admin.forms.search import SearchForm
|
|
|
-from wagtail.contrib.search_promotions import forms
|
|
|
+from wagtail.admin.modal_workflow import render_modal_workflow
|
|
|
+from wagtail.contrib.search_promotions import forms, models
|
|
|
from wagtail.contrib.search_promotions.models import Query
|
|
|
from wagtail.log_actions import log
|
|
|
+from wagtail.search.utils import normalise_query_string
|
|
|
|
|
|
|
|
|
@any_permission_required(
|
|
@@ -260,3 +262,50 @@ def delete(request, query_id):
|
|
|
"query": query,
|
|
|
},
|
|
|
)
|
|
|
+
|
|
|
+
|
|
|
+def chooser(request, get_results=False):
|
|
|
+ # Get most popular queries
|
|
|
+ queries = models.Query.get_most_popular()
|
|
|
+
|
|
|
+ # If searching, filter results by query string
|
|
|
+ if "q" in request.GET:
|
|
|
+ searchform = SearchForm(request.GET)
|
|
|
+ if searchform.is_valid():
|
|
|
+ query_string = searchform.cleaned_data["q"]
|
|
|
+ queries = queries.filter(
|
|
|
+ query_string__icontains=normalise_query_string(query_string)
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ searchform = SearchForm()
|
|
|
+
|
|
|
+ paginator = Paginator(queries, per_page=10)
|
|
|
+ try:
|
|
|
+ queries = paginator.page(request.GET.get("p", 1))
|
|
|
+ except InvalidPage:
|
|
|
+ raise Http404
|
|
|
+
|
|
|
+ # Render
|
|
|
+ if get_results:
|
|
|
+ return TemplateResponse(
|
|
|
+ request,
|
|
|
+ "wagtailsearchpromotions/queries/chooser/results.html",
|
|
|
+ {
|
|
|
+ "queries": queries,
|
|
|
+ },
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ return render_modal_workflow(
|
|
|
+ request,
|
|
|
+ "wagtailsearchpromotions/queries/chooser/chooser.html",
|
|
|
+ None,
|
|
|
+ {
|
|
|
+ "queries": queries,
|
|
|
+ "searchform": searchform,
|
|
|
+ },
|
|
|
+ json_data={"step": "chooser"},
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def chooserresults(request):
|
|
|
+ return chooser(request, get_results=True)
|