diff --git a/ietf/doc/tests.py b/ietf/doc/tests.py index 8b112f5c5e1..f14b5b1af0f 100644 --- a/ietf/doc/tests.py +++ b/ietf/doc/tests.py @@ -423,6 +423,7 @@ def test_indexes(self): def test_ajax_search_docs(self): draft = IndividualDraftFactory(name="draft-ietf-rfc1234bis") rfc = IndividualRfcFactory(rfc_number=1234) + bcp = IndividualRfcFactory(name="bcp12345", type_id="bcp") url = urlreverse('ietf.doc.views_search.ajax_select2_search_docs', kwargs={ "model_name": "document", @@ -444,14 +445,14 @@ def test_ajax_search_docs(self): url = urlreverse('ietf.doc.views_search.ajax_select2_search_docs', kwargs={ "model_name": "document", - "doc_type": "draft,rfc", + "doc_type": "all", }) r = self.client.get(url, dict(q="1234")) self.assertEqual(r.status_code, 200) data = r.json() - self.assertEqual(len(data), 2) - pks = set([data[i]["id"] for i in range(2)]) - self.assertEqual(pks, set([rfc.pk, draft.pk])) + self.assertEqual(len(data), 3) + pks = set([data[i]["id"] for i in range(3)]) + self.assertEqual(pks, set([bcp.pk, rfc.pk, draft.pk])) diff --git a/ietf/doc/urls.py b/ietf/doc/urls.py index fbc99f6a269..496b2d8f3a0 100644 --- a/ietf/doc/urls.py +++ b/ietf/doc/urls.py @@ -90,7 +90,7 @@ url(r'^all/?$', views_search.index_all_drafts), url(r'^active/?$', views_search.index_active_drafts), url(r'^recent/?$', views_search.recent_drafts), - url(r'^select2search/(?Pdocument)/(?P(draft|rfc|draft,rfc))/$', views_search.ajax_select2_search_docs), + url(r'^select2search/(?Pdocument)/(?P(draft|rfc|all))/$', views_search.ajax_select2_search_docs), url(r'^ballots/irsg/$', views_ballot.irsg_ballot_status), url(r'^ballots/rsab/$', views_ballot.rsab_ballot_status), diff --git a/ietf/doc/views_search.py b/ietf/doc/views_search.py index f49260d1aba..eef57a29c14 100644 --- a/ietf/doc/views_search.py +++ b/ietf/doc/views_search.py @@ -806,6 +806,14 @@ def index_active_drafts(request): return render(request, "doc/index_active_drafts.html", { 'groups': groups }) def ajax_select2_search_docs(request, model_name, doc_type): # TODO - remove model_name argument... + """Get results for a select2 search field + + doc_type can be "draft", "rfc", or "all", to search for only docs of type "draft", only docs of + type "rfc", or docs of type "draft" or "rfc" or any of the subseries ("bcp", "std", ...). + + If a need arises for searching _only_ for draft or rfc, without including the subseries, then an + additional option or options will be needed. + """ model = Document # Earlier versions allowed searching over DocAlias which no longer exists q = [w.strip() for w in request.GET.get('q', '').split() if w.strip()] @@ -813,11 +821,15 @@ def ajax_select2_search_docs(request, model_name, doc_type): # TODO - remove mod if not q: objs = model.objects.none() else: - if "," in doc_type: - qs = model.objects.filter(type__in=[t.strip() for t in doc_type.split(',')]) + if doc_type == "draft": + types = ["draft"] + elif doc_type == "rfc": + types = ["rfc"] + elif doc_type == "all": + types = ("draft", "rfc", "bcp", "fyi", "std") else: - qs = model.objects.filter(type=doc_type) - + return HttpResponseBadRequest("Invalid document type") + qs = model.objects.filter(type__in=[t.strip() for t in types]) for t in q: qs = qs.filter(name__icontains=t) diff --git a/ietf/ipr/forms.py b/ietf/ipr/forms.py index 0040a9db46e..8ea179789b0 100644 --- a/ietf/ipr/forms.py +++ b/ietf/ipr/forms.py @@ -95,7 +95,7 @@ def clean(self): return self.cleaned_data class DraftForm(forms.ModelForm): - document = SearchableDocumentField(label="I-D name/RFC number", required=True, doc_type="draft,rfc") + document = SearchableDocumentField(label="I-D name/RFC number", required=True, doc_type="all") class Meta: model = IprDocRel diff --git a/ietf/templates/base.html b/ietf/templates/base.html index 24de39f300f..ccecd8eb1cb 100644 --- a/ietf/templates/base.html +++ b/ietf/templates/base.html @@ -68,7 +68,7 @@