diff --git a/ietf/ipr/search.py b/ietf/ipr/search.py index 5930a74e2..0100003fc 100644 --- a/ietf/ipr/search.py +++ b/ietf/ipr/search.py @@ -44,7 +44,7 @@ def iprs_from_docs(docs): doc.iprs = disclosures iprs += disclosures iprs = list(set(iprs)) - return iprs + return iprs, docs def search(request, type="", q="", id=""): wgs = IETFWG.objects.filter(group_type__group_type_id=1).exclude(group_acronym__acronym='2000').select_related().order_by('acronym.acronym') @@ -61,6 +61,7 @@ def search(request, type="", q="", id=""): log("Got query: type=%s, q=%s, id=%s" % (type, q, id)) # Search by RFC number or draft-identifier + # Document list with IPRs if type in ["document_search", "rfc_search"]: if type == "document_search": if q: @@ -76,7 +77,7 @@ def search(request, type="", q="", id=""): docs = related_docs(first, []) #docs = get_doclist.get_doclist(first) - iprs = iprs_from_docs(docs) + iprs, docs = iprs_from_docs(docs) return render("ipr/search_doc_result.html", {"q": q, "first": first, "iprs": iprs, "docs": docs}, context_instance=RequestContext(request) ) elif start.count(): @@ -86,6 +87,7 @@ def search(request, type="", q="", id=""): raise ValueError("Missing or malformed search parameters, or internal error") # Search by legal name + # IPR list with documents elif type == "patent_search": iprs = IprDetail.objects.filter(legal_name__icontains=q, status__in=[1,3]).order_by("-submitted_date", "-ipr_id") count = iprs.count() @@ -97,10 +99,12 @@ def search(request, type="", q="", id=""): context_instance=RequestContext(request) ) # Search by content of email or pagent_info field + # IPR list with documents elif type == "patent_info_search": pass # Search by wg acronym + # Document list with IPRs elif type == "wg_search": try: docs = list(InternetDraft.objects.filter(group__acronym=q)) @@ -110,17 +114,29 @@ def search(request, type="", q="", id=""): docs += list(Rfc.objects.filter(group_acronym=q)) docs = [ doc for doc in docs if doc.ipr.count() ] - iprs = iprs_from_docs(docs) + iprs, docs = iprs_from_docs(docs) count = len(iprs) - #mark_last_doc(iprs) - return render("ipr/search_wg_result.html", {"q": q, "docs": docs, "iprs": iprs, "count": count }, + return render("ipr/search_wg_result.html", {"q": q, "docs": docs, "count": count }, context_instance=RequestContext(request) ) # Search by rfc and id title + # Document list with IPRs elif type == "title_search": - pass + try: + docs = list(InternetDraft.objects.filter(title__icontains=q)) + except: + docs = [] + docs += list(Rfc.objects.filter(title__icontains=q)) + + docs = [ doc for doc in docs if doc.ipr.count() ] + iprs, docs = iprs_from_docs(docs) + count = len(iprs) + return render("ipr/search_doctitle_result.html", {"q": q, "docs": docs, "count": count }, + context_instance=RequestContext(request) ) + # Search by title of IPR disclosure + # IPR list with documents elif type == "ipr_title_search": pass else: diff --git a/ietf/ipr/testurl.list b/ietf/ipr/testurl.list index 914192ceb..37d93d003 100644 --- a/ietf/ipr/testurl.list +++ b/ietf/ipr/testurl.list @@ -7,15 +7,21 @@ 200 /ipr/new-specific/ https://datatracker.ietf.org/public/ipr.cgi 200 /ipr/new-third-party/ https://datatracker.ietf.org/public/ipr_notify.cgi 200 /ipr/update/ https://datatracker.ietf.org/public/ipr_update_list.cgi + 200 /ipr/search/ https://datatracker.ietf.org/public/ipr_search.cgi 302 /ipr/search/?option=document_search # incomplete argument set gives redirect 200 /ipr/search/?document_search=mod&option=document_search https://datatracker.ietf.org/public/ipr_search.cgi?option=document_search&document_search=mod 200,sort /ipr/search/?id_document_tag=2220&option=document_search https://datatracker.ietf.org/public/ipr_search.cgi?option=document_search&id_document_tag=2220 200,sort /ipr/search/?rfc_search=1034&option=rfc_search https://datatracker.ietf.org/public/ipr_search.cgi?option=rfc_search&rfc_search=1034 # Loong result, RFC search 200 /ipr/search/?rfc_search=4444&option=rfc_search https://datatracker.ietf.org/public/ipr_search.cgi?option=rfc_search&rfc_search=4444 # Empty result, RFC search -200 /ipr/about/ https://datatracker.ietf.org/public/ipr_disclosure.cgi 200 /ipr/search/?patent_search=nortel&option=patent_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_search&patent_search=nortel +200 /ipr/search/?patent_search=nortelxz&option=patent_search https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_search&patent_search=nortelxz # Empty result 200,sort,ignore:quote /ipr/search/?wg_search=dnsext&option=wg_search https://datatracker.ietf.org/public/ipr_search.cgi?option=wg_search&wg_search=dnsext +#200,sort,ignore:quote /ipr/search/?wg_search=aaa&option=wg_search https://datatracker.ietf.org/public/ipr_search.cgi?option=wg_search&wg_search=aaa # FIXME This fails, needs revisiting +200,sort,ignore:quote /ipr/search/?wg_search=acct&option=wg_search https://datatracker.ietf.org/public/ipr_search.cgi?option=wg_search&wg_search=acct # Empty result +200,sort,ignore:quote /ipr/search/?option=title_search&title_search=AAA https://datatracker.ietf.org/public/ipr_search.cgi?option=title_search&title_search=AAA +200,sort,ignore:quote /ipr/search/?option=title_search&title_search=AAAxz https://datatracker.ietf.org/public/ipr_search.cgi?option=title_search&title_search=AAAxz # Empty result +200 /ipr/about/ https://datatracker.ietf.org/public/ipr_disclosure.cgi 200 /ipr/2006/ 200 /ipr/2006/feb/ 200 /ipr/by-date/ diff --git a/ietf/templates/ipr/search_doctitle_result.html b/ietf/templates/ipr/search_doctitle_result.html new file mode 100644 index 000000000..fb839c1f8 --- /dev/null +++ b/ietf/templates/ipr/search_doctitle_result.html @@ -0,0 +1,57 @@ +{% extends "ipr/search_result.html" %} +{% load ietf_filters %} + {% block search_result %} + + + {% if not count %} + + + + + {% else %} + + + {% block iprlist %} + {% for doc in docs %} + + + + + {% if doc.iprs %} + {% for ipr in doc.iprs %} + + + + + + {% endfor %} + {% else %} + + + + + {% endif %} + + {% endfor %} + {% endblock %} + {% endif %} +
{% block search_header %}{% if not count %}Search result on {{ q }}{% else %}Document Title Search Result{% endif %}{% endblock %}
+ No IPR disclosures related to a document with the word(s) {{ q }} in the title have been submitted. +
Total number of IPR disclosures found: {{ count }}
+ IPR that is related to {{ doc|rfcspace|lstrip:"0"|rfcnospace }}, "{{ doc.title }}"{% if doc.related %}, {{ doc.relation }} {{ doc.related|rfcspace|lstrip:"0"|rfcnospace }}, "{{ doc.related.title }}"{% endif %}, + which has the string "{{ q }}" within the document title. +
{{ ipr.submitted_date }}
  • ID # {{ ipr.ipr_id }}
  • + + {% for item in ipr.updated_by.all %} + {% ifequal item.processed 1 %} + IPR disclosure ID# {{ item.ipr.ipr_id }} "{{ item.ipr.title }}" Updates + {% endifequal %} + {% endfor %} + "{{ ipr.title }}" +
    No IPR disclosures related to {{ doc|rfcspace|lstrip:"0" }} have been submitted
    + {% endblock %} diff --git a/ietf/templates/ipr/search_holder_result.html b/ietf/templates/ipr/search_holder_result.html index a25d464de..62e89e380 100644 --- a/ietf/templates/ipr/search_holder_result.html +++ b/ietf/templates/ipr/search_holder_result.html @@ -1,4 +1,4 @@ {% extends "ipr/search_result.html" %} {% load ietf_filters %} -{% block search_header %}Patent Owner/Applicant Search Result{% endblock %} +{% block search_header %}{% if not count %}Search result on {{ q }}{% else %}Patent Owner/Applicant Search Result{% endif %}{% endblock %} {% block item_intro %}IPR that was submitted by {{ q }},{% endblock %} diff --git a/ietf/templates/ipr/search_result.html b/ietf/templates/ipr/search_result.html index 1ebb63ba4..268d1b5c8 100644 --- a/ietf/templates/ipr/search_result.html +++ b/ietf/templates/ipr/search_result.html @@ -14,7 +14,7 @@ {% if not iprs %} - No IPR disclosures have been submitted by {{ q }} + No IPR disclosures have been submitted by the {{ q }} {% else %} Total number of IPR disclosures found: {{ count }} diff --git a/ietf/templates/ipr/search_wg_result.html b/ietf/templates/ipr/search_wg_result.html index 9a9811010..8c04c5b36 100644 --- a/ietf/templates/ipr/search_wg_result.html +++ b/ietf/templates/ipr/search_wg_result.html @@ -3,11 +3,14 @@ {% block search_result %} - {% if not iprs %} + {% if not count %} - + + {% else %} diff --git a/test/diff/_ipr_search__option=title_search&title_search=AAAxz b/test/diff/_ipr_search__option=title_search&title_search=AAAxz new file mode 100644 index 000000000..8d886d6f4 --- /dev/null +++ b/test/diff/_ipr_search__option=title_search&title_search=AAAxz @@ -0,0 +1,6 @@ +--- https://datatracker.ietf.org/public/ipr_search.cgi?option=title_search&title_search=AAAxz ++++ /ipr/search/?option=title_search&title_search=AAAxz +@@ -1,0 +1,1 @@ ++IPR Disclosure Page +@@ -2,0 +3,2 @@ ++IPR Search Main Page \ No newline at end of file diff --git a/test/diff/_ipr_search__patent_search=nortelxz&option=patent_search b/test/diff/_ipr_search__patent_search=nortelxz&option=patent_search new file mode 100644 index 000000000..3ac6e34cc --- /dev/null +++ b/test/diff/_ipr_search__patent_search=nortelxz&option=patent_search @@ -0,0 +1,4 @@ +--- https://datatracker.ietf.org/public/ipr_search.cgi?option=patent_search&patent_search=nortelxz ++++ /ipr/search/?patent_search=nortelxz&option=patent_search +@@ -4,0 +4,2 @@ ++IPR Search Main Page IPR Disclosure Page \ No newline at end of file
    {% block search_header %}Working Group Search Result{% endblock %}
    No IPR disclosures have been submitted by {{ q }} + No IPR disclosures related to the {{ q }} working group have been submitted. +
    Total number of IPR disclosures found: {{ count }}
    Total number of IPR disclosures found: {{ count }}