kopia lustrzana https://github.com/wagtail/wagtail
Merge 8a8b0cc112
into 196cb02d10
commit
ff33c1ffb8
|
@ -6,8 +6,8 @@ app_name = "wagtailsearchpromotions"
|
|||
urlpatterns = [
|
||||
path("", views.IndexView.as_view(), name="index"),
|
||||
path("results/", views.IndexView.as_view(results_only=True), name="index_results"),
|
||||
path("add/", views.add, name="add"),
|
||||
path("<int:query_id>/", views.edit, name="edit"),
|
||||
path("add/", views.AddSearchPromotion.as_view(), name="add"),
|
||||
path("<int:query_id>/", views.EditSearchPromotion.as_view(), name="edit"),
|
||||
path("<int:query_id>/delete/", views.delete, name="delete"),
|
||||
path("queries/chooser/", views.chooser, name="chooser"),
|
||||
path(
|
||||
|
|
|
@ -6,16 +6,20 @@ from wagtail.admin.widgets import AdminPageChooser
|
|||
from wagtail.contrib.search_promotions.models import Query, SearchPromotion
|
||||
|
||||
|
||||
class QueryForm(forms.Form):
|
||||
query_string = forms.CharField(
|
||||
label=_("Search term(s)/phrase"),
|
||||
help_text=_(
|
||||
"Enter the full search string to match. An "
|
||||
"exact match is required for your Promoted Results to be "
|
||||
"displayed, wildcards are NOT allowed."
|
||||
),
|
||||
required=True,
|
||||
)
|
||||
class QueryForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Query
|
||||
fields = ["query_string"]
|
||||
labels = {
|
||||
"query_string": _("Search term(s)/phrase"),
|
||||
}
|
||||
help_texts = {
|
||||
"query_string": _(
|
||||
"Enter the full search string to match. An "
|
||||
"exact match is required for your Promoted Results to be "
|
||||
"displayed, wildcards are NOT allowed."
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
class SearchPromotionForm(forms.ModelForm):
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{% block titletag %}{% trans "Add search promotion" %}{% endblock %}
|
||||
{% block content %}
|
||||
{% trans "Add search pick" as add_str %}
|
||||
{% include "wagtailadmin/shared/header.html" with title=add_str icon="pick" %}
|
||||
{% include "wagtailadmin/shared/header.html" with title=add_str icon="pick" action_url="" %}
|
||||
|
||||
<div class="nice-padding">
|
||||
<div class="help-block help-info">
|
||||
|
@ -21,7 +21,7 @@
|
|||
|
||||
<ul class="fields">
|
||||
<li>
|
||||
{% include "wagtailsearchpromotions/queries/chooser_field.html" with field=query_form.query_string only %}
|
||||
{% include "wagtailsearchpromotions/queries/chooser_field.html" with field=form.query_string only %}
|
||||
</li>
|
||||
<li>
|
||||
{% include "wagtailsearchpromotions/includes/searchpromotions_formset.html" with formset=searchpicks_formset only %}
|
||||
|
@ -47,7 +47,7 @@
|
|||
{% include "wagtailsearchpromotions/queries/chooser_field.js" only %}
|
||||
|
||||
$(function() {
|
||||
createQueryChooser('{{ query_form.query_string.auto_id }}');
|
||||
createQueryChooser('{{ form.query_string.auto_id }}');
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
{% block titletag %}{% blocktrans trimmed with query=query.query_string %}Editing {{ query }}{% endblocktrans %}{% endblock %}
|
||||
{% block content %}
|
||||
{% trans "Editing" as editing_str %}
|
||||
{% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=query.query_string icon="pick" %}
|
||||
{% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=query.query_string icon="pick" action_url="" %}
|
||||
|
||||
<form action="{% url 'wagtailsearchpromotions:edit' query.id %}" method="POST" class="nice-padding" novalidate>
|
||||
{% csrf_token %}
|
||||
|
||||
<ul class="fields">
|
||||
<li>
|
||||
{% include "wagtailsearchpromotions/queries/chooser_field.html" with field=query_form.query_string only %}
|
||||
{% include "wagtailsearchpromotions/queries/chooser_field.html" with field=form.query_string only %}
|
||||
</li>
|
||||
<li>
|
||||
{% include "wagtailsearchpromotions/includes/searchpromotions_formset.html" with formset=searchpicks_formset only %}
|
||||
|
@ -38,7 +38,7 @@
|
|||
{% include "wagtailsearchpromotions/queries/chooser_field.js" only %}
|
||||
|
||||
$(function() {
|
||||
createQueryChooser('{{ query_form.query_string.auto_id }}');
|
||||
createQueryChooser('{{ form.query_string.auto_id }}');
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
|
|
@ -125,121 +125,113 @@ def save_searchpicks(query, new_query, searchpicks_formset):
|
|||
return False
|
||||
|
||||
|
||||
@permission_required("wagtailsearchpromotions.add_searchpromotion")
|
||||
def add(request):
|
||||
if request.method == "POST":
|
||||
# Get query
|
||||
query_form = forms.QueryForm(request.POST)
|
||||
if query_form.is_valid():
|
||||
query = Query.get(query_form["query_string"].value())
|
||||
class AddSearchPromotion(generic.CreateView):
|
||||
template_name = "wagtailsearchpromotions/add.html"
|
||||
form_class = forms.QueryForm
|
||||
model = Query
|
||||
add_url_name = "wagtailsearchpromotions:add"
|
||||
index_url_name = "wagtailsearchpromotions:index"
|
||||
edit_url_name = "wagtailsearchpromotions:edit"
|
||||
success_message = gettext_lazy("Editor's picks for '%(query)s' created.")
|
||||
error_message = gettext_lazy("Recommendations have not been created due to errors")
|
||||
|
||||
# Save search picks
|
||||
searchpicks_formset = forms.SearchPromotionsFormSet(
|
||||
request.POST, instance=query
|
||||
def get_success_url(self):
|
||||
return reverse("wagtailsearchpromotions:index")
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
if self.request.POST:
|
||||
context["searchpicks_formset"] = forms.SearchPromotionsFormSet(
|
||||
self.request.POST
|
||||
)
|
||||
if save_searchpicks(query, query, searchpicks_formset):
|
||||
for search_pick in searchpicks_formset.new_objects:
|
||||
log(search_pick, "wagtail.create")
|
||||
messages.success(
|
||||
request,
|
||||
_("Editor's picks for '%(query)s' created.") % {"query": query},
|
||||
buttons=[
|
||||
messages.button(
|
||||
reverse("wagtailsearchpromotions:edit", args=(query.id,)),
|
||||
_("Edit"),
|
||||
)
|
||||
],
|
||||
)
|
||||
return redirect("wagtailsearchpromotions:index")
|
||||
else:
|
||||
if len(searchpicks_formset.non_form_errors()):
|
||||
# formset level error (e.g. no forms submitted)
|
||||
messages.error(
|
||||
request,
|
||||
" ".join(
|
||||
error for error in searchpicks_formset.non_form_errors()
|
||||
),
|
||||
)
|
||||
else:
|
||||
# specific errors will be displayed within form fields
|
||||
messages.error(
|
||||
request,
|
||||
_("Recommendations have not been created due to errors"),
|
||||
)
|
||||
else:
|
||||
searchpicks_formset = forms.SearchPromotionsFormSet()
|
||||
else:
|
||||
query_form = forms.QueryForm()
|
||||
searchpicks_formset = forms.SearchPromotionsFormSet()
|
||||
context["searchpicks_formset"] = forms.SearchPromotionsFormSet()
|
||||
|
||||
return TemplateResponse(
|
||||
request,
|
||||
"wagtailsearchpromotions/add.html",
|
||||
{
|
||||
"query_form": query_form,
|
||||
"searchpicks_formset": searchpicks_formset,
|
||||
"form_media": query_form.media + searchpicks_formset.media,
|
||||
},
|
||||
)
|
||||
context["form_media"] = (
|
||||
self.get_form().media + context["searchpicks_formset"].media
|
||||
)
|
||||
return context
|
||||
|
||||
def form_valid(self, form):
|
||||
query = form.save()
|
||||
|
||||
@permission_required("wagtailsearchpromotions.change_searchpromotion")
|
||||
def edit(request, query_id):
|
||||
query = get_object_or_404(Query, id=query_id)
|
||||
|
||||
if request.method == "POST":
|
||||
# Get query
|
||||
query_form = forms.QueryForm(request.POST)
|
||||
# and the recommendations
|
||||
searchpicks_formset = forms.SearchPromotionsFormSet(
|
||||
request.POST, instance=query
|
||||
self.request.POST, instance=query
|
||||
)
|
||||
|
||||
if query_form.is_valid():
|
||||
new_query = Query.get(query_form["query_string"].value())
|
||||
if searchpicks_formset.is_valid():
|
||||
save_searchpicks(query, query, searchpicks_formset)
|
||||
|
||||
# Save search picks
|
||||
if save_searchpicks(query, new_query, searchpicks_formset):
|
||||
messages.success(
|
||||
request,
|
||||
_("Editor's picks for '%(query)s' updated.") % {"query": new_query},
|
||||
buttons=[
|
||||
messages.button(
|
||||
reverse("wagtailsearchpromotions:edit", args=(query.id,)),
|
||||
_("Edit"),
|
||||
)
|
||||
],
|
||||
)
|
||||
return redirect("wagtailsearchpromotions:index")
|
||||
else:
|
||||
if len(searchpicks_formset.non_form_errors()):
|
||||
messages.error(
|
||||
request,
|
||||
" ".join(
|
||||
error for error in searchpicks_formset.non_form_errors()
|
||||
),
|
||||
)
|
||||
# formset level error (e.g. no forms submitted)
|
||||
else:
|
||||
messages.error(
|
||||
request, _("Recommendations have not been saved due to errors")
|
||||
)
|
||||
# specific errors will be displayed within form fields
|
||||
for search_pick in searchpicks_formset.new_objects:
|
||||
log(search_pick, "wagtail.create")
|
||||
|
||||
else:
|
||||
query_form = forms.QueryForm(initial={"query_string": query.query_string})
|
||||
searchpicks_formset = forms.SearchPromotionsFormSet(instance=query)
|
||||
self.success_message = self.success_message % {"query": query}
|
||||
self.success_url = reverse(self.index_url_name)
|
||||
return super().form_valid(form)
|
||||
else:
|
||||
self.error_message = " ".join(
|
||||
error for error in searchpicks_formset.non_form_errors()
|
||||
)
|
||||
return self.form_invalid(form)
|
||||
|
||||
return TemplateResponse(
|
||||
request,
|
||||
"wagtailsearchpromotions/edit.html",
|
||||
{
|
||||
"query_form": query_form,
|
||||
"searchpicks_formset": searchpicks_formset,
|
||||
"query": query,
|
||||
"form_media": query_form.media + searchpicks_formset.media,
|
||||
},
|
||||
)
|
||||
|
||||
class EditSearchPromotion(generic.EditView):
|
||||
model = Query
|
||||
form_class = forms.QueryForm
|
||||
template_name = "wagtailsearchpromotions/edit.html"
|
||||
context_object_name = "query"
|
||||
add_url_name = "wagtailsearchpromotions:add"
|
||||
index_url_name = "wagtailsearchpromotions:index"
|
||||
edit_url_name = "wagtailsearchpromotions:edit"
|
||||
success_message = _("Editor's picks for '%(query)s' updated.")
|
||||
error_message = _("Recommendations have not been saved due to errors")
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
return get_object_or_404(self.model, id=self.kwargs["query_id"])
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse("wagtailsearchpromotions:index")
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
if self.request.POST:
|
||||
context["searchpicks_formset"] = forms.SearchPromotionsFormSet(
|
||||
self.request.POST, instance=self.object
|
||||
)
|
||||
else:
|
||||
context["searchpicks_formset"] = forms.SearchPromotionsFormSet(
|
||||
instance=self.object
|
||||
)
|
||||
|
||||
context["form_media"] = (
|
||||
self.get_form().media + context["searchpicks_formset"].media
|
||||
)
|
||||
return context
|
||||
|
||||
def form_valid(self, form):
|
||||
self.object = form.save()
|
||||
|
||||
searchpicks_formset = forms.SearchPromotionsFormSet(
|
||||
self.request.POST, instance=self.object
|
||||
)
|
||||
|
||||
if searchpicks_formset.is_valid():
|
||||
save_searchpicks(self.object, self.object, searchpicks_formset)
|
||||
|
||||
for search_pick in searchpicks_formset.new_objects:
|
||||
log(search_pick, "wagtail.create")
|
||||
|
||||
messages.success(
|
||||
self.request, self.success_message % {"query": self.object}
|
||||
)
|
||||
return redirect(reverse("wagtailsearchpromotions:index"))
|
||||
else:
|
||||
messages.error(self.request, self.error_message)
|
||||
return self.render_to_response(self.get_context_data(form=form))
|
||||
|
||||
def form_invalid(self, form):
|
||||
messages.error(self.request, self.error_message)
|
||||
return self.render_to_response(self.get_context_data(form=form))
|
||||
|
||||
|
||||
@permission_required("wagtailsearchpromotions.delete_searchpromotion")
|
||||
|
|
Ładowanie…
Reference in New Issue