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 %} -

{{ ipr.title }}
{{ name }}

- -
- -
- -{% block tab_content %} - -{% endblock %} - -{% endblock %} diff --git a/ietf/templates/ipr/details_edit.html b/ietf/templates/ipr/details_edit.html index eb236b93a..7fc0ab6b4 100644 --- a/ietf/templates/ipr/details_edit.html +++ b/ietf/templates/ipr/details_edit.html @@ -152,7 +152,7 @@
-
Add more
+
Add more
{% bootstrap_field form.other_designations layout='horizontal' %} diff --git a/ietf/templates/ipr/details_history.html b/ietf/templates/ipr/details_history.html index 46ed8cd56..d072f5b4d 100644 --- a/ietf/templates/ipr/details_history.html +++ b/ietf/templates/ipr/details_history.html @@ -1,49 +1,52 @@ -{% extends "ipr/details_base.html" %} -{# Copyright The IETF Trust 2007, All Rights Reserved #} +{% extends "ietf.html" %} -{% load ietf_filters %} -{% load ipr_filters %} +{% load ietf_filters ipr_filters %} -{% block pagehead %} - -{% endblock %} +{% block title %}History for IPR - {{ ipr.title }}{% endblock %} -{% block tab_content %} +{% block content %} +

History for IPR disclosure
{{ ipr.title }}

-

Disclosure history

-{% if user|has_role:"Area Director,Secretariat,IANA,RFC Editor" %} -
- Add comment - Add email -
-{% endif %} + {% include "ipr/details_tabs.html" %} + {% if user|has_role:"Area Director,Secretariat,IANA,RFC Editor" %} +

+ Add comment + Add email +

+ {% endif %} - - +
DateTypeByText
+ + + + + + + + - {% for e in events %} - - - + {% for e in events %} + + + + + {% if e.message %} + + {% else %} + {% endif %} - {% endif %} - - - {% if e.message %} - - - {% endfor %} -
DateTypeByText
{{ 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 }}{{ e.message|render_message_for_history|format_history_text:"100" }} + {% if e.response_due %} +
Response Due: {{ e.response_due|date:"Y-m-d" }} + {% endif %} +
{{ e.desc|format_history_text }}{{ e.by }}{{ 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 %} -
- -{% endblock %} + + {% endfor %} + + +{% endblock content %} diff --git a/ietf/templates/ipr/details_tabs.html b/ietf/templates/ipr/details_tabs.html new file mode 100644 index 000000000..6b7e311fd --- /dev/null +++ b/ietf/templates/ipr/details_tabs.html @@ -0,0 +1,5 @@ + diff --git a/ietf/templates/ipr/details_view.html b/ietf/templates/ipr/details_view.html index 4a010612b..4e5732bf6 100644 --- a/ietf/templates/ipr/details_view.html +++ b/ietf/templates/ipr/details_view.html @@ -1,285 +1,240 @@ -{% extends "ipr/details_base.html" %} -{# Copyright The IETF Trust 2007, All Rights Reserved #} +{% extends "ietf.html" %} -{% load ietf_filters %} -{% load ipr_filters %} +{% load ietf_filters ipr_filters %} -{% block tab_content %} +{% block title %}IPR Details - {{ ipr.title }}{% endblock %} - {% 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 %} +{% 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 %} +
- {% for item in ipr.relatedipr_source_set.all %} -

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 }}". +

IPR Details
{{ ipr.title }}

- {% endif %} -

- {% endfor %} - - {% for item in ipr.relatedipr_target_set.all %} - {% if item.source.state.slug == "posted" %} -

- This IPR disclosure has been updated by IPR disclosure ID #{{ item.source.id }}, - "{{ item.source.title }}". -

- {% endif %} - {% endfor %} + {% include "ipr/details_tabs.html" %} +
{% if ipr.state_id == 'posted' %} -

Update this IPR disclosure. 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 %} - -

Submitted Date: {{ ipr.time|date:"F j, Y" }} - {% if user|has_role:"Secretariat" %}
State: {{ ipr.state }}{% endif %} -

- - {% if user|has_role:"Secretariat" and ipr.update_notified_date %} - This update was notified to the submitter of the IPR that is being updated on: {{ ipr.update_notified_date|date:"Y-m-d" }} - {% endif %} - - - {% if user|has_role:"Secretariat" %} -
- {% if ipr.updates and ipr.state_id == 'pending' and not ipr.update_notified_date %} - Notify - {% endif %} - {% if ipr.updates and ipr.state_id == 'pending' and ipr.update_notified_date or not ipr.updates and ipr.state_id == 'pending' %} - Post - {% endif %} - Email - Edit - Change State -
- {% endif %} - - - - - - - - - -
- {% cycle I,II,III,IV,V,VI,VII,VIII as section %}. - {% if ipr|to_class_name == "ThirdPartyIprDisclosure" %}Possible{% endif %} - Patent Holder/Applicant ("Patent Holder") -
Legal Name: {{ ipr.holder_legal_name }}
- - {% if ipr.holder_contact_name or ipr.holder_contact_info %} - - - - - - -
- {% cycle section %}. - Patent Holder's Contact for License Application -
Name:{{ ipr.holder_contact_name }}
Email:{{ ipr.holder_contact_email }}
Other Info:
(address,phone,etc)
{{ ipr.holder_contact_info|linebreaks }}
- {% endif %} - - - {% if ipr.ietfer_name or ipr.ietfer_contact_info %} - - - - - {% if ipr.ietfer_name %} - - - - {% else %} - - {% endif %} -
- {% cycle section %}. - Contact Information for the IETF Participant Whose Personal Belief Triggered this Disclosure: -
Name:{{ ipr.ietfer_name }}
Email:{{ ipr.ietfer_contact_email }}
Other Info:
(address,phone,etc)
{{ ipr.ietfer_contact_info|linebreaks }}
No information submitted
- {% endif %} - - - {% if ipr.iprdocrel_set.all or ipr.other_designations %} - - - - - {% for iprdocrel in ipr.iprdocrel_set.all %} - - - - - {% endfor %} - {% if ipr.other_designations %} - - {% endif %} -
- {% cycle section %}. - IETF Document or Other Contribution to Which this IPR Disclosure Relates: -
{{ iprdocrel.doc_type }}:"{{ iprdocrel.document.document.title }}"
({{ iprdocrel.formatted_name }}){% if iprdocrel.revisions or iprdocrel.sections%}
{% if iprdocrel.revisions %}Revisions: {{ iprdocrel.revisions }}    {% endif %}{% if iprdocrel.sections %}Sections: {{ iprdocrel.sections }}{% endif %}{% endif %}
Designations for Other Contributions:{{ ipr.other_designations }}
- {% endif %} - - {% if ipr.patent_info %} - - - - - - {% if ipr.patent_info %} - - - - - - - - - - - {% else %} - - {% endif %} - -
- {% cycle section %}. - Disclosure of Patent Information (i.e., patents or patent - applications required to be disclosed by Section 6 of RFC 3979) -
- A. For granted patents or published pending patent applications, - please provide the following information:
Patent, Serial, Publication, Registration, - or Application/File number(s): {{ ipr.patent_info|linebreaks }}
- B. Does this disclosure relate to an unpublished pending patent application?: - {{ ipr.has_patent_pending|yesno }} -
This disclosure relates to an unpublished pending patent application.
- {% endif %} - - - {% if ipr.licensing %} - - - - - - - - - - - - - - - - - - - - - {% if ipr.licensing_comments %} - - {% else %} - - {% endif %} - - - {% if ipr.lic_checkbox %} - - - - {% endif %} - - - - -
- {% cycle section %}. - Licensing Declaration -
- 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): -
{% if ipr.licensing.slug == "later" %}{{ ipr.licensing.desc|slice:"2:"|slice:":43" }}{% else %}{{ ipr.licensing.desc|slice:"2:" }}{% endif %}
- Licensing information, comments, notes, or URL for further information: -
{{ ipr.licensing_comments|linebreaks }}
No information submitted
-

- {% if ipr.lic_checkbox != 1 %}{{ ipr.lic_checkbox }}{% endif %} - The individual submitting this template represents and warrants that all - terms and conditions that must be satisfied for implementers of any - covered IETF specification to obtain a license have been disclosed in this - IPR disclosure statement. -

- {% if ipr|to_class_name == "GenericIprDisclosure" %} -

- Note: According to - RFC 3979, - Section 6.4.3, unless you check the box - above, and choose either option a) or b), you must still file specific - IPR disclosures as appropriate. -

- {% endif %} -
- 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 %} - - - - - - - - -
- {% cycle section %}. - Statement -
{{ ipr.statement }}
+ Update this IPR disclosure {% endif %} - - - - - -
- {% cycle section %}. - Contact Information of Submitter of this Form -
Name:{{ ipr.submitter_name }}
Email:{{ ipr.submitter_email }}
- - {% if ipr.notes %} - - - - - {% if ipr.notes %} - - {% else %} - - {% endif %} -
- {% cycle section %}. - Other Notes: -
{{ ipr.notes|linebreaks }}
No information submitted
+ {% if user|has_role:"Secretariat" %} + {# admin actions #} + {% if ipr.updates and ipr.state_id == 'pending' and not ipr.update_notified_date %} + Notify {% endif %} -{% endblock %} + {% if ipr.updates and ipr.state_id == 'pending' and ipr.update_notified_date or not ipr.updates and ipr.state_id == 'pending' %} + Post + {% endif %} + + Email + Edit + Change State + {% endif %} +
+ + {% 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 %} + +
+ Submitted: + {{ ipr.time|date:"F j, Y" }} +
+ +
+ {% if user|has_role:"Secretariat" %} + State: + {{ ipr.state }} + {% endif %} +
+ + + {% if ipr.state_id == 'posted' %} +

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 %} +

Updates

+ + {% for item in 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 %} +

Updated by

+ + {% for item in 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 %} +
This update was notified to the submitter of the IPR that is being updated on: {{ ipr.update_notified_date|date:"Y-m-d" }}
+ {% endif %} + +

+ +

{% cycle I,II,III,IV,V,VI,VII,VIII as section %}. + {% if ipr|to_class_name == "ThirdPartyIprDisclosure" %}Possible{% endif %} + Patent Holder/Applicant ("Patent Holder")

+ +
+
Holder legal name
+
{{ ipr.holder_legal_name }}
+
+ + {% if ipr.holder_contact_name or ipr.holder_contact_info %} +

{% cycle section %}. Patent Holder's Contact for License Application

+ +
+
Holder contact name
+
{{ ipr.holder_contact_name }}
+ +
Holder contact email
+
{{ ipr.holder_contact_email }}
+ +
Holder contact info
+
{{ ipr.holder_contact_info|linebreaks }}
+
+ {% endif %} + + {% if ipr.ietfer_name or ipr.ietfer_contact_email or ipr.ietfer_contact_info %} +

{% cycle section %}. Contact Information for the IETF Participant Whose Personal Belief Triggered this Disclosure

+ +
+
Name
+
{{ ipr.ietfer_name }}
+ +
Email
+
{{ ipr.ietfer_contact_email }}
+ +
Other info
+
{{ ipr.ietfer_contact_info|linebreaks }}
+
+ {% endif %} + + {% if ipr.iprdocrel_set.all or ipr.other_designations %} +

{% cycle section %}. IETF Document or Other Contribution to Which this IPR Disclosure Relates

+ +
+ {% for iprdocrel in ipr.iprdocrel_set.all %} +
{{ iprdocrel.doc_type }}
+
+
{{ iprdocrel.formatted_name }} ("{{ iprdocrel.document.document.title }}")
+ + {% if iprdocrel.revisions %} +
Revisions: {{ iprdocrel.revisions }}
+ {% endif %} + + {% if iprdocrel.sections %} +
Sections: {{ iprdocrel.sections }}
+ {% endif %} +
+ {% endfor %} + + {% if ipr.other_designations %} +
Designations for Other Contributions
+
{{ ipr.other_designations }}
+ {% endif %} +
+ {% endif %} + + {% if ipr.patent_info or ipr.has_patent_pending %} +

{% cycle section %}. Disclosure of Patent Information i.e., patents or patent applications required to be disclosed by Section 6 of RFC 3979

+ +

A. For granted patents or published pending patent applications, please provide the following information:

+ +
+
Patent, Serial, Publication, Registration, or Application/File number(s):
+
{{ ipr.patent_info|linebreaks }}
+
+ +

B. Does this disclosure relate to an unpublished pending patent application?:

+ +
+
Has patent pending:
+
{{ ipr.has_patent_pending|yesno }}
+
+ {% endif %} + + {% if ipr.licensing %} +

{% cycle section %}. Licensing Declaration

+ +

+ 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): +

+ +
+
Licensing
+
{% if ipr.licensing.slug == "later" %}{{ ipr.licensing.desc|slice:"2:"|slice:":43" }}{% else %}{{ ipr.licensing.desc|slice:"2:" }}{% endif %}
+ +
Licensing information, comments, notes, or URL for further information
+
{{ ipr.licensing_comments|default:"(No information submitted)"|linebreaks }}
+
+ +

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 %} +

{% cycle section %}. Statement

+ +
+
Statement
+
{{ ipr.statement|linebreaks }}
+
+ {% endif %} + +

{% cycle section %}. Contact Information of Submitter of this Form

+ +
+
Submitter name
+
{{ ipr.submitter_name }}
+ +
Submitter email
+
{{ ipr.submitter_email }}
+
+ + {% if ipr.notes %} +

{% cycle section %}. Other Notes

+ +
+
Additional notes
+
{{ ipr.notes|linebreaks }}
+
+ {% endif %} + + +

Only those sections of the relevant entry form where the submitter provided information are displayed.

+ +
+{% endblock content %}