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 %}
+
+ {% block search_header %}{% if not count %}Search result on {{ q }}{% else %}Document Title Search Result{% endif %}{% endblock %} |
+ {% if not count %}
+
+ |
+
+ No IPR disclosures related to a document with the word(s) {{ q }} in the title have been submitted.
+ |
+
+ {% else %}
+ Total number of IPR disclosures found: {{ count }} |
+
+ {% block iprlist %}
+ {% for doc in docs %}
+
+
+
+ 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.
+ |
+
+ {% if doc.iprs %}
+ {% for ipr in doc.iprs %}
+
+ {{ 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 }}"
+ |
+
+ {% endfor %}
+ {% else %}
+
+ |
+ No IPR disclosures related to {{ doc|rfcspace|lstrip:"0" }} have been submitted |
+
+ {% endif %}
+
+ {% endfor %}
+ {% endblock %}
+ {% endif %}
+
+ {% 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 %}
{% block search_header %}Working Group Search Result{% endblock %} |
- {% if not iprs %}
+ {% if not count %}
|
- 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 }} |
{% else %}
Total number of IPR disclosures found: {{ count }} |
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