Rohit Sharma 2024-05-02 09:35:59 +00:00 zatwierdzone przez GitHub
commit ff33c1ffb8
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
5 zmienionych plików z 117 dodań i 121 usunięć

Wyświetl plik

@ -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(

Wyświetl plik

@ -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):

Wyświetl plik

@ -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 %}

Wyświetl plik

@ -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 %}

Wyświetl plik

@ -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")