Skip to content

Commit

Permalink
Fixes GeoNode#10290 complete_ISO_contact_roles_per_ressource_base_wit…
Browse files Browse the repository at this point in the history
…h_multiplicity
  • Loading branch information
mwallschlaeger committed Jan 12, 2023
1 parent 945d08a commit 5d10ab4
Show file tree
Hide file tree
Showing 8 changed files with 299 additions and 116 deletions.
114 changes: 96 additions & 18 deletions geonode/documents/templates/layouts/doc_panels.html
Original file line number Diff line number Diff line change
Expand Up @@ -553,32 +553,110 @@
{% endblock doc_extra_metadata %}
</div>
</div>
<div class="col-xs-12 col-lg-3">
<div class="panel panel-default" style="margin-top: 5px">
<div class="panel-heading">{% trans "Responsible Parties" %}</div>
<div class="panel-body">
<span><label for="{{ document_form.poc|id }}">{{ document_form.poc.label }}</label></span>
{{ document_form.poc }}
</div>
<!-- Contact Roles -->
<div class="col-xs-12 col-lg-3" >
<div class="panel panel-default" class="collapse" style="margin-top: 5px">
<div class="panel-heading">{% trans "Responsible Parties" %}</div>
{% block document_poc %}
<div class="panel-body check-select">
<span><label for="{{ document_form.poc|id }}">{{ document_form.poc.label }}</label></span>
{{ document_form.poc }}
</div>
{% endblock document_poc %}
</div>
<div class="panel panel-default">
<div class="panel-heading">{% trans "Responsible and Permissions" %}</div>
<div class="panel-body">
<div>
<span><label for="{{ document_form.owner|id }}">{{ document_form.owner.label }}</label></span>
<!--<p class="xxs-font-size">(Responsible of the cited resource)</p>-->
{{ document_form.owner }}
<div class="panel-heading">{% trans "Responsible and Permissions" %}</div>
<div class="panel-body">
{% block document_owner %}
<div>
<span><label for="{{ document_form.owner|id }}">{{ document_form.owner.label }}</label></span>
{{ document_form.owner }}
</div>
{% endblock document_owner %}
</div>
</div>
<a href="#id-more-metadata-panel" data-toggle="collapse">{% trans "toggle more Contact Roles" %}</a>
<div class="panel panel-default panel-collapse collapse" collapsed id='id-more-metadata-panel'>
<div class="panel-heading">{% trans "more metadata contact roles" %}</div>
<div class="panel-body">
{% block document_metadata_author %}
<div>
<span><label for="{{ document_form.metadata_author|id }}">{{ document_form.metadata_author.label }}</label></span>
{{ document_form.metadata_author }}
</div>
{% endblock document_metadata_author %}
</div>
<div class="panel-body">
{% block document_processor %}
<div>
<span><label for="{{ document_form.processor|id }}">{{ document_form.processor.label }}</label></span>
{{ document_form.processor }}
</div>
{% endblock document_processor %}
</div>
<div>
<span><label for="{{ document_form.metadata_author|id }}">{{ document_form.metadata_author.label }}</label></span>
<!--<p class="xxs-font-size">(Author of the metadata)</p>-->
{{ document_form.metadata_author }}
<div class="panel-body">
{% block document_publisher %}
<div>
<span><label for="{{ document_form.publisher|id }}">{{ document_form.publisher.label }}</label></span>
{{ document_form.publisher }}
</div>
{% endblock document_publisher %}
</div>
<div class="panel-body">
{% block document_custodian %}
<div>
<span><label for="{{ document_form.custodian|id }}">{{ document_form.custodian.label }}</label></span>
{{ document_form.custodian }}
</div>
{% endblock document_custodian %}
</div>
<div class="panel-body">
{% block document_distributor %}
<div>
<span><label for="{{ document_form.distributor|id }}">{{ document_form.distributor.label }}</label></span>
{{ document_form.distributor }}
</div>
{% endblock document_distributor %}
</div>
<div class="panel-body">
{% block document_resource_user %}
<div>
<span><label for="{{ document_form.resource_user|id }}">{{ document_form.resource_user.label }}</label></span>
{{ document_form.resource_user }}
</div>
{% endblock document_resource_user %}
</div>
<div class="panel-body">
{% block document_resource_provider %}
<div>
<span><label for="{{ document_form.resource_provider|id }}">{{ document_form.resource_provider.label }}</label></span>
{{ document_form.resource_provider }}
</div>
{% endblock document_resource_provider %}
</div>
<div class="panel-body">
{% block document_originator %}
<div>
<span><label for="{{ document_form.originator|id }}">{{ document_form.originator.label }}</label></span>
{{ document_form.originator }}
</div>
{% endblock document_originator %}
</div>
<div class="panel-body">
{% block document_principal_investigator %}
<div>
<span><label for="{{ document_form.principal_investigator|id }}">{{ document_form.principal_investigator.label }}</label></span>
{{ document_form.principal_investigator }}
</div>
{% endblock document_principal_investigator %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div></div></div>
</div>
</div>
</div>
{% endblock ownership %}
Expand Down
2 changes: 1 addition & 1 deletion geonode/documents/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ def document_metadata(
# define contact role forms
contact_role_forms_context = {}
for role in document.get_multivalue_role_property_names():
document.fields[role].initial = [p.username for p in document.__getattribute__(role)]
document_form.fields[role].initial = [p.username for p in document.__getattribute__(role)]
role_form = ProfileForm(prefix=role)
role_form.hidden = True
contact_role_forms_context[f"{role}_form"] = role_form
Expand Down
2 changes: 1 addition & 1 deletion geonode/geoapps/templates/apps/app_metadata.html
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ <h2>{% trans "Point of Contact" %}</h2>
</fieldset>
<fieldset class="form-controls modal-forms modal hide fade" id="metadata_form">
<h2>{% trans "Metadata Provider" %}</h2>
{{ author_form|as_bootstrap }}
{{ metadata_author_form|as_bootstrap }}
<button type='button' class="modal-cloose-btn btn btn-primary">{% trans "Done" %}</button>
</fieldset>

Expand Down
100 changes: 89 additions & 11 deletions geonode/geoapps/templates/layouts/app_panels.html
Original file line number Diff line number Diff line change
Expand Up @@ -483,32 +483,110 @@
{% endblock geoapp_extra_metadata %}
</div>
</div>
<div class="col-xs-12 col-lg-3">
<div class="panel panel-default" style="margin-top: 5px">
<!-- Contact Roles -->
<div class="col-xs-12 col-lg-3" >
<div class="panel panel-default" class="collapse" style="margin-top: 5px">
<div class="panel-heading">{% trans "Responsible Parties" %}</div>
<div class="panel-body">
<span><label for="{{ geoapp_form.poc|id }}">{{ geoapp_form.poc.label }}</label></span>
{{ geoapp_form.poc }}
</div>
{% block geoapp_poc %}
<div class="panel-body check-select">
<span><label for="{{ geoapp_form.poc|id }}">{{ geoapp_form.poc.label }}</label></span>
{{ geoapp_form.poc }}
</div>
{% endblock geoapp_poc %}
</div>
<div class="panel panel-default">
<div class="panel-heading">{% trans "Responsible and Permissions" %}</div>
<div class="panel-body">
{% block geoapp_owner %}
<div>
<span><label for="{{ geoapp_form.owner|id }}">{{ geoapp_form.owner.label }}</label></span>
<!--<p class="xxs-font-size">(Responsible of the cited resource)</p>-->
{{ geoapp_form.owner }}
<span><label for="{{ geoapp_form.owner|id }}">{{ geoapp_form.owner.label }}</label></span>
{{ geoapp_form.owner }}
</div>
{% endblock geoapp_owner %}
</div>
</div>
<a href="#id-more-metadata-panel" data-toggle="collapse">{% trans "toggle more Contact Roles" %}</a>
<div class="panel panel-default panel-collapse collapse" collapsed id='id-more-metadata-panel'>
<div class="panel-heading">{% trans "more metadata contact roles" %}</div>
<div class="panel-body">
{% block geoapp_metadata_author %}
<div>
<span><label for="{{ geoapp_form.metadata_author|id }}">{{ geoapp_form.metadata_author.label }}</label></span>
<!--<p class="xxs-font-size">(Author of the metadata)</p>-->
{{ geoapp_form.metadata_author }}
</div>
{% endblock geoapp_metadata_author %}
</div>
<div class="panel-body">
{% block geoapp_processor %}
<div>
<span><label for="{{ geoapp_form.processor|id }}">{{ geoapp_form.processor.label }}</label></span>
{{ geoapp_form.processor }}
</div>
{% endblock geoapp_processor %}
</div>
<div class="panel-body">
{% block geoapp_publisher %}
<div>
<span><label for="{{ geoapp_form.publisher|id }}">{{ geoapp_form.publisher.label }}</label></span>
{{ geoapp_form.publisher }}
</div>
{% endblock geoapp_publisher %}
</div>
<div class="panel-body">
{% block geoapp_custodian %}
<div>
<span><label for="{{ geoapp_form.custodian|id }}">{{ geoapp_form.custodian.label }}</label></span>
{{ geoapp_form.custodian }}
</div>
{% endblock geoapp_custodian %}
</div>
<div class="panel-body">
{% block geoapp_distributor %}
<div>
<span><label for="{{ geoapp_form.distributor|id }}">{{ geoapp_form.distributor.label }}</label></span>
{{ geoapp_form.distributor }}
</div>
{% endblock geoapp_distributor %}
</div>
<div class="panel-body">
{% block geoapp_resource_user %}
<div>
<span><label for="{{ geoapp_form.resource_user|id }}">{{ geoapp_form.resource_user.label }}</label></span>
{{ geoapp_form.resource_user }}
</div>
{% endblock geoapp_resource_user %}
</div>
<div class="panel-body">
{% block geoapp_resource_provider %}
<div>
<span><label for="{{ geoapp_form.resource_provider|id }}">{{ geoapp_form.resource_provider.label }}</label></span>
{{ geoapp_form.resource_provider }}
</div>
{% endblock geoapp_resource_provider %}
</div>
<div class="panel-body">
{% block geoapp_originator %}
<div>
<span><label for="{{ geoapp_form.originator|id }}">{{ geoapp_form.originator.label }}</label></span>
{{ geoapp_form.originator }}
</div>
{% endblock geoapp_originator %}
</div>
<div class="panel-body">
{% block geoapp_principal_investigator %}
<div>
<span><label for="{{ geoapp_form.principal_investigator|id }}">{{ geoapp_form.principal_investigator.label }}</label></span>
{{ geoapp_form.principal_investigator }}
</div>
{% endblock geoapp_principal_investigator %}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div></div></div>
</div>
</div>
</div>
<div id="settings" class="tab-pane fade" style="overflow: hidden;">
Expand Down
76 changes: 14 additions & 62 deletions geonode/geoapps/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,6 @@ def geoapp_metadata(request, geoappid, template='apps/app_metadata.html', ajax=T
# Add metadata_author or poc if missing
geoapp_obj.add_missing_metadata_author_or_poc()
resource_type = geoapp_obj.resource_type
poc = geoapp_obj.poc
metadata_author = geoapp_obj.metadata_author
topic_category = geoapp_obj.category
current_keywords = [keyword.name for keyword in geoapp_obj.keywords.all()]

Expand Down Expand Up @@ -289,10 +287,7 @@ def geoapp_metadata(request, geoappid, template='apps/app_metadata.html', ajax=T
values = [keyword.id for keyword in topic_thesaurus if int(tid) == keyword.thesaurus.id]
tkeywords_form.fields[tid].initial = values

if request.method == "POST" and geoapp_form.is_valid(
) and category_form.is_valid() and tkeywords_form.is_valid():
new_poc = geoapp_form.cleaned_data.pop('poc')
new_author = geoapp_form.cleaned_data.pop('metadata_author')
if request.method == "POST" and geoapp_form.is_valid() and category_form.is_valid() and tkeywords_form.is_valid():
new_keywords = current_keywords if request.keyword_readonly else geoapp_form.cleaned_data.pop('keywords')
new_regions = geoapp_form.cleaned_data.pop('regions')

Expand All @@ -301,50 +296,13 @@ def geoapp_metadata(request, geoappid, template='apps/app_metadata.html', ajax=T
category_form.cleaned_data['category_choice_field']:
new_category = TopicCategory.objects.get(
id=int(category_form.cleaned_data['category_choice_field']))

if new_poc is None:
if poc is None:
poc_form = ProfileForm(
request.POST,
prefix="poc",
instance=poc)
else:
poc_form = ProfileForm(request.POST, prefix="poc")
if poc_form.is_valid():
if len(poc_form.cleaned_data['profile']) == 0:
# FIXME use form.add_error in django > 1.7
errors = poc_form._errors.setdefault(
'profile', ErrorList())
errors.append(
_('You must set a point of contact for this resource'))
poc = None
if poc_form.has_changed and poc_form.is_valid():
new_poc = poc_form.save()

if new_author is None:
if metadata_author is None:
author_form = ProfileForm(request.POST, prefix="author",
instance=metadata_author)
else:
author_form = ProfileForm(request.POST, prefix="author")
if author_form.is_valid():
if len(author_form.cleaned_data['profile']) == 0:
# FIXME use form.add_error in django > 1.7
errors = author_form._errors.setdefault(
'profile', ErrorList())
errors.append(
_('You must set an author for this resource'))
metadata_author = None
if author_form.has_changed and author_form.is_valid():
new_author = author_form.save()

geoapp_form.cleaned_data.pop('ptype')

additional_vals = dict(
poc=new_poc or geoapp_obj.poc,
metadata_author=new_author or geoapp_obj.metadata_author,
category=new_category
)
# update contact roles
geoapp_obj.set_contact_roles_from_metadata_edit(geoapp_form)
geoapp_obj.save()

additional_vals = dict(category=new_category)

geoapp_form.cleaned_data.pop('metadata')
extra_metadata = geoapp_form.cleaned_data.pop('extra_metadata')
Expand All @@ -359,7 +317,6 @@ def geoapp_metadata(request, geoappid, template='apps/app_metadata.html', ajax=T
instance=geoapp_obj,
keywords=new_keywords,
regions=new_regions,
vals=_vals,
notify=True,
extra_metadata=json.loads(extra_metadata)
)
Expand Down Expand Up @@ -419,16 +376,13 @@ def geoapp_metadata(request, geoappid, template='apps/app_metadata.html', ajax=T
status=400)
# - POST Request Ends here -

# Request.GET
if poc is not None:
geoapp_form.fields['poc'].initial = poc.id
poc_form = ProfileForm(prefix="poc")
poc_form.hidden = True

if metadata_author is not None:
geoapp_form.fields['metadata_author'].initial = metadata_author.id
author_form = ProfileForm(prefix="author")
author_form.hidden = True
# define contact role forms
contact_role_forms_context = {}
for role in geoapp_obj.get_multivalue_role_property_names():
geoapp_form.fields[role].initial = [p.username for p in geoapp_obj.__getattribute__(role)]
role_form = ProfileForm(prefix=role)
role_form.hidden = True
contact_role_forms_context[f"{role}_form"] = role_form

metadata_author_groups = get_user_visible_groups(request.user)

Expand All @@ -442,8 +396,6 @@ def geoapp_metadata(request, geoappid, template='apps/app_metadata.html', ajax=T
"resource": geoapp_obj,
"geoapp": geoapp_obj,
"geoapp_form": geoapp_form,
"poc_form": poc_form,
"author_form": author_form,
"category_form": category_form,
"tkeywords_form": tkeywords_form,
"metadata_author_groups": metadata_author_groups,
Expand All @@ -454,7 +406,7 @@ def geoapp_metadata(request, geoappid, template='apps/app_metadata.html', ajax=T
|
set(getattr(settings, 'UI_REQUIRED_FIELDS', []))
)
})
} | contact_role_forms_context)


@login_required
Expand Down
Loading

0 comments on commit 5d10ab4

Please sign in to comment.