diff --git a/ietf/ipr/forms.py b/ietf/ipr/forms.py index de628c0d8..d4752293d 100644 --- a/ietf/ipr/forms.py +++ b/ietf/ipr/forms.py @@ -116,7 +116,7 @@ class GenericDisclosureForm(forms.Form): patent_info = forms.CharField(max_length=255,widget=forms.Textarea, required=False, help_text="Patent, Serial, Publication, Registration, or Application/File number(s), Date(s) granted or applied for, Country, and any additional notes") has_patent_pending = forms.BooleanField(required=False) statement = forms.CharField(max_length=255,widget=forms.Textarea,required=False) - updates = SearchableIprDisclosuresField(required=False, help_text="If this disclosure updates other disclosures identify here which ones. Leave this field blank if this disclosure does not update any prior disclosures. Note: Updates to IPR disclosures must only be made by authorized representatives of the original submitters. Updates will automatically be forwarded to the current Patent Holder's Contact and to the Submitter of the original IPR disclosure.") + updates = SearchableIprDisclosuresField(required=False, help_text="If this disclosure updates other disclosures identify here which ones. Leave this field blank if this disclosure does not update any prior disclosures. Note: Updates to IPR disclosures must only be made by authorized representatives of the original submitters. Updates will automatically be forwarded to the current Patent Holder's Contact and to the Submitter of the original IPR disclosure.") same_as_ii_above = forms.BooleanField(label="Same as in section II above", required=False) def __init__(self,*args,**kwargs): diff --git a/ietf/ipr/views.py b/ietf/ipr/views.py index ef92b3fa2..4354262d4 100644 --- a/ietf/ipr/views.py +++ b/ietf/ipr/views.py @@ -393,14 +393,11 @@ def history(request, id): if not has_role(request.user, "Secretariat"): events = events.exclude(type='private_comment') - tabs = [('Disclosure','disclosure',urlreverse('ipr_show',kwargs={'id':id}),True), - ('History','history',urlreverse('ipr_history',kwargs={'id':id}),True)] - return render(request, "ipr/details_history.html", { 'events':events, 'ipr': ipr, - 'tabs':tabs, - 'selected':'history' + 'tabs': get_details_tabs(ipr, 'History'), + 'selected_tab_entry':'history' }) def iprs_for_drafts_txt(request): @@ -677,6 +674,14 @@ def search(request): form = SearchForm(initial={'state':['all']}) return render(request, "ipr/search.html", {"form":form }) +def get_details_tabs(ipr, selected): + return [ + t + (t[0].lower() == selected.lower(),) + for t in [ + ('Disclosure', urlreverse('ipr_show', kwargs={ 'id': ipr.pk })), + ('History', urlreverse('ipr_history', kwargs={ 'id': ipr.pk })) + ]] + def show(request, id): """View of individual declaration""" ipr = get_object_or_404(IprDisclosureBase, id=id).get_child() @@ -688,13 +693,11 @@ def show(request, id): elif ipr.state.slug != 'posted': raise Http404 - tabs = [('Disclosure','disclosure',urlreverse('ipr_show',kwargs={'id':id}),True), - ('History','history',urlreverse('ipr_history',kwargs={'id':id}),True)] - return render(request, "ipr/details_view.html", { 'ipr': ipr, - 'tabs':tabs, - 'selected':'disclosure', + 'tabs': get_details_tabs(ipr, 'Disclosure'), + 'updates_iprs': ipr.relatedipr_source_set.all(), + 'updated_by_iprs': ipr.relatedipr_target_set.filter(source__state="posted") }) def showlist(request): diff --git a/ietf/templates/ipr/details_base.html b/ietf/templates/ipr/details_base.html deleted file mode 100644 index bfbddafe8..000000000 --- a/ietf/templates/ipr/details_base.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends "base.html" %} -{% load ietf_filters %} -{# Copyright The IETF Trust 2007, All Rights Reserved #} - -{% block title %}IPR Details - {{ ipr.title }}{% endblock %} - -{% block pagehead %} - - - -{% endblock %} - -{% block content %} -
Date | Type | By | Text |
---|
Date | +Type | +By | +Text | +||||
---|---|---|---|---|---|---|---|
{{ e.time|date:"Y-m-d" }} | -{{ e.type }}
- {% if e.response_due %}
- {% if e.response_past_due %}
- ![]() | ||||||
{{ e.time|date:"Y-m-d" }} | +{{ e.type }} + {% if e.response_due and e.response_past_due %} + + {% endif %} + | +{{ e.by }} | + {% if e.message %} +{{ e.message|render_message_for_history|format_history_text:"100" }}
+ {% if e.response_due %}
+ Response Due: {{ e.response_due|date:"Y-m-d" }} + {% endif %} + |
+ {% else %}
+ {{ e.desc|format_history_text }} | {% endif %} - {% endif %} - -{{ e.by }} | - {% if e.message %} -{{ e.message|render_message_for_history|format_history_text:"100" }}
- {% if e.response_due %}
- Response Due: {{ e.response_due|date:"Y-m-d" }} - {% endif %} - {% else %} - | {{ e.desc|format_history_text }} - {% endif %} - | -
This IPR disclosure does not comply with the formal requirements of Section 6, - "IPR Disclosures," of RFC 3979, "Intellectual Property Rights in IETF Technology." -
- {% endif %} +{% block pagehead %} + +{% endblock %} - {% if ipr.has_legacy_event %} -The text of the original IPR disclosure is available in the disclosure history.
- {% endif %} -Only those sections of the relevant entry form where the submitter provided information are displayed.
+{% block content %} +This IPR disclosure updates IPR disclosure ID #{{ item.target.id }}, - {% if item.target.state.slug == "removed" %} - "{{ item.target.title }}", which was removed at the request of the submitter. - {% else %} - "{{ item.target.title }}". +
- This IPR disclosure has been updated by IPR disclosure ID #{{ item.source.id }}, - "{{ item.source.title }}". -
- {% endif %} - {% endfor %} + {% include "ipr/details_tabs.html" %} + + + {% if not ipr.compliant %} +This IPR disclosure does not comply with the formal requirements of Section 6, + "IPR Disclosures," of RFC 3979, "Intellectual Property Rights in IETF Technology." +
+ {% endif %} + + {% if ipr.has_legacy_event %} +The text of the original IPR disclosure is available in the disclosure history.
+ {% endif %} + +Note: Updates to IPR disclosures must only be made by authorized + representatives of the original submitters. Updates will automatically + be forwarded to the current Patent Holder's Contact and to the Submitter + of the original IPR disclosure.
+ {% endif %} + + {% if updates_iprs %} +This IPR disclosure updates IPR disclosure ID #{{ item.target.id }}, + {% if item.target.state.slug == "removed" %} + "{{ item.target.title }}", which was removed at the request of the submitter. + {% else %} + "{{ item.target.title }}". + + {% endif %} +
+ {% endfor %} + {% endif %} + + {% if updated_by_iprs %} ++ This IPR disclosure has been updated by IPR disclosure ID #{{ item.source.id }}, + "{{ item.source.title }}". +
+ {% endfor %} + {% endif %} + + {% if user|has_role:"Secretariat" and ipr.update_notified_date %} +A. For granted patents or published pending patent applications, please provide the following information:
+ +B. Does this disclosure relate to an unpublished pending patent application?:
+ ++ The Patent Holder states that its position with respect + to licensing any patent claims contained in the patent(s) or patent + application(s) disclosed above that would necessarily be infringed by + implementation of the technology required by the relevant IETF specification + ("Necessary Patent Claims"), for the purpose of implementing such + specification, is as follows(select one licensing declaration option only): +
+ +Note: The individual submitting this template represents and warrants + that he or she is authorized by the Patent Holder to agree to the + above-selected licensing declaration.
+ + {% elif ipr.statement %} +Only those sections of the relevant entry form where the submitter provided information are displayed.
+ +