From 2c2c4e3b02d5ab9cc94986582bd1c8691102932c Mon Sep 17 00:00:00 2001 From: Jorran de Wit <jorrandewit@outlook.com> Date: Sun, 14 May 2017 17:22:12 +0200 Subject: [PATCH] Add subject area filter to submissions --- submissions/forms.py | 18 ++++++++++--- .../templates/submissions/submissions.html | 2 +- submissions/views.py | 26 +++++++------------ 3 files changed, 24 insertions(+), 22 deletions(-) diff --git a/submissions/forms.py b/submissions/forms.py index e65974bd8..70b2b792e 100644 --- a/submissions/forms.py +++ b/submissions/forms.py @@ -14,8 +14,19 @@ from crispy_forms.layout import Layout, Div, Field, HTML, Submit class SubmissionSearchForm(forms.Form): author = forms.CharField(max_length=100, required=False, label="Author(s)") - title_keyword = forms.CharField(max_length=100, label="Title", required=False) - abstract_keyword = forms.CharField(max_length=1000, required=False, label="Abstract") + title = forms.CharField(max_length=100, required=False) + abstract = forms.CharField(max_length=1000, required=False) + subject_area = forms.CharField(max_length=10, required=False, widget=forms.Select( + choices=((None, 'Show all'),) + SCIPOST_SUBJECT_AREAS[0][1])) + + def search_results(self): + """Return all Submission objects according to search""" + return Submission.objects.public_overcomplete().filter( + title__icontains=self.cleaned_data.get('title', ''), + author_list__icontains=self.cleaned_data.get('author', ''), + abstract__icontains=self.cleaned_data.get('abstract', ''), + subject_area__icontains=self.cleaned_data.get('subject_area', '') + ) ############################### @@ -158,8 +169,7 @@ class ConsiderRefereeInvitationForm(forms.Form): class SetRefereeingDeadlineForm(forms.Form): - deadline = forms.DateField(required=False, label='', - widget=forms.SelectDateWidget) + deadline = forms.DateField(required=False, label='', widget=forms.SelectDateWidget) class VotingEligibilityForm(forms.Form): diff --git a/submissions/templates/submissions/submissions.html b/submissions/templates/submissions/submissions.html index 3ad37262b..380ca755a 100644 --- a/submissions/templates/submissions/submissions.html +++ b/submissions/templates/submissions/submissions.html @@ -23,7 +23,7 @@ <h2 class="card-title">Search SciPost Submissions:</h2> <form action="{% url 'submissions:submissions' %}" class="small" method="get"> {{ form|bootstrap:'4,8,sm' }} - <input class="btn btn-sm btn-secondary" type="submit" name="Submit" /> + <input class="btn btn-sm btn-secondary" type="submit" value="Search"/> </form> </div> </div> diff --git a/submissions/views.py b/submissions/views.py index 343f58ca9..b49f185de 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -27,9 +27,9 @@ from .forms import SubmissionIdentifierForm, SubmissionForm, SubmissionSearchFor SubmissionCycleChoiceForm from .utils import SubmissionUtils +from journals.constants import SCIPOST_JOURNALS_SPECIALIZATIONS from scipost.forms import ModifyPersonalMessageForm, RemarkForm from scipost.models import Contributor, Remark, RegistrationInvitation - from scipost.services import ArxivCaller from scipost.utils import Utils from strings import arxiv_caller_errormessages_submissions @@ -186,12 +186,13 @@ class SubmissionCreateView(PermissionRequiredMixin, CreateView): class SubmissionListView(ListView): model = Submission template_name = 'submissions/submissions.html' - form = SubmissionSearchForm() + form = SubmissionSearchForm submission_search_list = [] paginate_by = 10 def get_queryset(self): queryset = Submission.objects.public_overcomplete() + self.form = self.form(self.request.GET) if 'to_journal' in self.kwargs: queryset = queryset.filter( latest_activity__gte=timezone.now() + datetime.timedelta(days=-60), @@ -204,26 +205,17 @@ class SubmissionListView(ListView): discipline=discipline, latest_activity__gte=timezone.now() + datetime.timedelta(weeks=-int(nrweeksback)) ) - elif 'Submit' in self.request.GET: - queryset = queryset.filter( - title__icontains=self.request.GET.get('title_keyword', ''), - author_list__icontains=self.request.GET.get('author', ''), - abstract__icontains=self.request.GET.get('abstract_keyword', '') - ) + elif self.form.is_valid() and self.form.has_changed(): + queryset = self.form.search_results() return queryset.order_by('-submission_date') def get_context_data(self, **kwargs): # Call the base implementation first to get a context - context = super(SubmissionListView, self).get_context_data(**kwargs) + context = super().get_context_data(**kwargs) - # Keep any search fields previously filled - initialdata = { - 'author': self.request.GET.get('author', ''), - 'title_keyword': self.request.GET.get('title_keyword', ''), - 'abstract_keyword': self.request.GET.get('abstract_keyword', '') - } - context['form'] = SubmissionSearchForm(initial=initialdata) + # Form into the context! + context['form'] = self.form # To customize display in the template if 'to_journal' in self.kwargs: @@ -232,7 +224,7 @@ class SubmissionListView(ListView): context['discipline'] = self.kwargs['discipline'] context['nrweeksback'] = self.kwargs['nrweeksback'] context['browse'] = True - elif 'Submit' not in self.request.GET: + elif not self.form.is_valid() or not self.form.has_changed(): context['recent'] = True return context -- GitLab