Skip to content

Commit 690b8a4

Browse files
committed
Merge branch 'develop' into 9331-extract-bounding-box2 #9331
2 parents 2edb351 + c07f3a8 commit 690b8a4

46 files changed

Lines changed: 1140 additions & 745 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

conf/solr/8.11.1/schema.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,9 @@
364364
<field name="responseRate" type="text_en" multiValued="false" stored="true" indexed="true"/>
365365
<field name="samplingErrorEstimates" type="text_en" multiValued="false" stored="true" indexed="true"/>
366366
<field name="samplingProcedure" type="text_en" multiValued="false" stored="true" indexed="true"/>
367-
<field name="series" type="text_en" multiValued="false" stored="true" indexed="true"/>
368-
<field name="seriesInformation" type="text_en" multiValued="false" stored="true" indexed="true"/>
369-
<field name="seriesName" type="text_en" multiValued="false" stored="true" indexed="true"/>
367+
<field name="series" type="text_en" multiValued="true" stored="true" indexed="true"/>
368+
<field name="seriesInformation" type="text_en" multiValued="true" stored="true" indexed="true"/>
369+
<field name="seriesName" type="text_en" multiValued="true" stored="true" indexed="true"/>
370370
<field name="socialScienceNotes" type="text_en" multiValued="false" stored="true" indexed="true"/>
371371
<field name="socialScienceNotesSubject" type="text_en" multiValued="false" stored="true" indexed="true"/>
372372
<field name="socialScienceNotesText" type="text_en" multiValued="false" stored="true" indexed="true"/>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Changes made in v5.13 and v5.14 in multiple PRs to improve the embedded Schema.org metadata in dataset pages will only be propagated to the Schema.Org JSON-LD metadata export if a reExportAll() is done.
2+
3+
The 5.14 release notes should include the standard instructions for doing a reExportAll after updating the code.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
## Contact Email Improvements
2+
3+
Email sent from the contact forms to the contact(s) for a collection, dataset, or datafile can now optionally be cc'd to a support email address. The support email address can be changed from the default :SystemEmail address to a separate :SupportEmail address. When multiple contacts are listed, the system will now send one email to all contacts (with the optional cc if configured) instead of separate emails to each contact. Contact names with a comma that refer to Organizations will no longer have the name parts reversed in the email greeting. A new protected feedback API has been added.
4+
5+
## Backward Incompatibilities
6+
7+
When there are multiple contacts, the system will now send one email with all of the contacts in the To: header instead of sending one email to each contact (with no indication that others have been notified).
8+
9+
## New JVM/MicroProfile Settings
10+
11+
dataverse.mail.support-email - allows a separate email, distinct from the :SystemEmail to be used as the to address in emails from the contact form/ feedback api.
12+
dataverse.mail.cc-support-on-contact-emails - include the support email address as a CC: entry when contact/feedback emails are sent to the contacts for a collection, dataset, or datafile.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
### Support for Grouping Dataset Files by Folder and Category Tag
2+
3+
Dataverse now supports grouping dataset files by folder and/or optionally by Tag/Category. The default for whether to order by folder can be changed via :OrderByFolder. Ordering by category must be enabled by an administrator via the :CategoryOrder parameter which is used to specify which tags appear first (e.g. to put Documentation files before Data or Code files, etc.) These Group-By options work with the existing sort options, i.e. sorting alphabetically means that files within each folder or tag group will be sorted alphabetically. :AllowUsersToManageOrdering can be set to true to allow users to turn folder ordering and category ordering (if enabled) on or off in the current dataset view.
4+
5+
### New Setting
6+
7+
:CategoryOrder - a comma separated list of Category/Tag names defining the order in which files with those tags should be displayed. The setting can include custom tag names along with the pre-defined defaults ( Documentation, Data, and Code, which can be overridden by the ::FileCategories setting.)
8+
:OrderByFolder - defaults to true - whether to group files in the same folder together
9+
:AllowUserManagementOfOrder - default false - allow users to toggle ordering on/off in the dataset display

doc/release-notes/9256-series.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
## Metadata field Series now repeatable
2+
This enhancement allows depositors to define multiple instances of the metadata field Series in the Citation Metadata block.
3+
4+
## Major Use Cases and Infrastructure Enhancements
5+
* Data contained in a dataset may belong to multiple series. Making the field Series repeatable will make it possible to reflect this fact in the dataset metadata. (Issue #9255, PR #9256)
6+
7+
### Additional Upgrade Steps
8+
9+
Update the Citation metadata block:
10+
11+
wget https://github.com/IQSS/dataverse/releases/download/v5.14/citation.tsv
12+
curl http://localhost:8080/api/admin/datasetfield/load -X POST --data-binary @citation.tsv -H "Content-type: text/tab-separated-values"
13+
14+
## Additional Release Steps
15+
16+
1. Replace Solr schema.xml to allow multiple series to be used. See specific instructions below for those installations without custom metadata blocks (1a) and those with custom metadata blocks (1b).
17+
18+
1a.
19+
20+
For installations without Custom Metadata Blocks:
21+
22+
-stop solr instance (usually service solr stop, depending on solr installation/OS, see the Installation Guide
23+
24+
-replace schema.xml
25+
26+
cp /tmp/dvinstall/schema.xml /usr/local/solr/solr-8.11.1/server/solr/collection1/conf
27+
28+
-start solr instance (usually service solr start, depending on solr/OS)
29+
30+
1b.
31+
32+
For installations with Custom Metadata Blocks:
33+
34+
-stop solr instance (usually service solr stop, depending on solr installation/OS, see the Installation Guide
35+
36+
edit the following lines to your schema.xml (to indicate that series and its components are now multiValued='true"):
37+
38+
<field name="series" type="string" stored="true" indexed="true" multiValued="true"/>
39+
<field name="seriesInformation" type="text_en" multiValued="true" stored="true" indexed="true"/>
40+
<field name="seriesName" type="text_en" multiValued="true" stored="true" indexed="true"/>
41+
42+
-restart solr instance (usually service solr start, depending on solr/OS)

doc/sphinx-guides/source/_static/api/ddi_dataset.xml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,12 @@
5252
<depDate>1002-01-01</depDate>
5353
</distStmt>
5454
<serStmt>
55-
<serName>SeriesName</serName>
56-
<serInfo>SeriesInformation</serInfo>
55+
<serName>SeriesName One</serName>
56+
<serInfo>SeriesInformation One</serInfo>
57+
</serStmt>
58+
<serStmt>
59+
<serName>SeriesName Two</serName>
60+
<serInfo>SeriesInformation Two</serInfo>
5761
</serStmt>
5862
</citation>
5963
<stdyInfo>

doc/sphinx-guides/source/api/native-api.rst

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,6 +1618,8 @@ The fully expanded example above (without environment variables) looks like this
16181618
16191619
The people who need to review the dataset (often curators or journal editors) can check their notifications periodically via API to see if any new datasets have been submitted for review and need their attention. See the :ref:`Notifications` section for details. Alternatively, these curators can simply check their email or notifications to know when datasets have been submitted (or resubmitted) for review.
16201620

1621+
.. _return-a-dataset:
1622+
16211623
Return a Dataset to Author
16221624
~~~~~~~~~~~~~~~~~~~~~~~~~~
16231625

@@ -1645,6 +1647,8 @@ The fully expanded example above (without environment variables) looks like this
16451647
16461648
The review process can sometimes resemble a tennis match, with the authors submitting and resubmitting the dataset over and over until the curators are satisfied. Each time the curators send a "reason for return" via API, that reason is persisted into the database, stored at the dataset version level.
16471649

1650+
The :ref:`send-feedback` API call may be useful as a way to move the conversation to email. However, note that these emails go to contacts (versus authors) and there is no database record of the email contents. (:ref:`dataverse.mail.cc-support-on-contact-email` will send a copy of these emails to the support email address which would provide a record.)
1651+
16481652
Link a Dataset
16491653
~~~~~~~~~~~~~~
16501654

@@ -4497,3 +4501,29 @@ A curl example using allowing access to a dataset's metadata
44974501
44984502
Please see :ref:`dataverse.api.signature-secret` for the configuration option to add a shared secret, enabling extra
44994503
security.
4504+
4505+
.. _send-feedback:
4506+
4507+
Send Feedback To Contact(s)
4508+
~~~~~~~~~~~~~~~~~~~~~~~~~~~
4509+
4510+
This API call allows sending an email to the contacts for a collection, dataset, or datafile or to the support email address when no object is specified.
4511+
The call is protected by the normal /admin API protections (limited to localhost or requiring a separate key), but does not otherwise limit the sending of emails.
4512+
Administrators should be sure only trusted applications have access to avoid the potential for spam.
4513+
4514+
The call is a POST with a JSON object as input with four keys:
4515+
- "targetId" - the id of the collection, dataset, or datafile. Persistent ids and collection aliases are not supported. (Optional)
4516+
- "subject" - the email subject line
4517+
- "body" - the email body to send
4518+
- "fromEmail" - the email to list in the reply-to field. (Dataverse always sends mail from the system email, but does it "on behalf of" and with a reply-to for the specified user.)
4519+
4520+
A curl example using an ``ID``
4521+
4522+
.. code-block:: bash
4523+
4524+
export SERVER_URL=http://localhost
4525+
export JSON='{"targetId":24, "subject":"Data Question", "body":"Please help me understand your data. Thank you!", "fromEmail":"dataverseSupport@mailinator.com"}'
4526+
4527+
curl -X POST -H 'Content-Type:application/json' -d "$JSON" $SERVER_URL/api/admin/feedback
4528+
4529+
Note that this call could be useful in coordinating with dataset authors (assuming they are also contacts) as an alternative/addition to the functionality provided by :ref:`return-a-dataset`.

doc/sphinx-guides/source/installation/config.rst

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2349,6 +2349,27 @@ See :ref:`discovery-sign-posting` for details.
23492349

23502350
Can also be set via any `supported MicroProfile Config API source`_, e.g. the environment variable ``DATAVERSE_SIGNPOSTING_LEVEL1_ITEM_LIMIT``.
23512351

2352+
dataverse.mail.support-email
2353+
++++++++++++++++++++++++++++
2354+
2355+
This provides an email address distinct from the :ref:`systemEmail` that will be used as the email address for Contact Forms and Feedback API. This address is used as the To address when the Contact form is launched from the Support entry in the top navigation bar and, if configured via :ref:`dataverse.mail.cc-support-on-contact-email`, as a CC address when the form is launched from a Dataverse/Dataset Contact button.
2356+
This allows configuration of a no-reply email address for :ref:`systemEmail` while allowing feedback to go to/be cc'd to the support email address, which would normally accept replies. If not set, the :ref:`systemEmail` is used for the feedback API/contact form email.
2357+
2358+
Note that only the email address is required, which you can supply without the ``<`` and ``>`` signs, but if you include the text, it's the way to customize the name of your support team, which appears in the "from" address in emails as well as in help text in the UI. If you don't include the text, the installation name (see :ref:`Branding Your Installation`) will appear in the "from" address.
2359+
2360+
Can also be set via any `supported MicroProfile Config API source`_, e.g. the environment variable ``DATAVERSE_MAIL_SUPPORT_EMAIL``.
2361+
2362+
.. _dataverse.mail.cc-support-on-contact-email:
2363+
2364+
dataverse.mail.cc-support-on-contact-email
2365+
++++++++++++++++++++++++++++++++++++++++++
2366+
2367+
If this setting is true, the contact forms and feedback API will cc the system (:SupportEmail if set, :SystemEmail if not) when sending email to the collection, dataset, or datafile contacts.
2368+
A CC line is added to the contact form when this setting is true so that users are aware that the cc will occur.
2369+
The default is false.
2370+
2371+
Can also be set via *MicroProfile Config API* sources, e.g. the environment variable ``DATAVERSE_MAIL_CC_SUPPORT_ON_CONTACT_EMAIL``.
2372+
23522373

23532374
.. _feature-flags:
23542375

@@ -3710,6 +3731,8 @@ For example:
37103731

37113732
When set to ``true``, this setting allows a superuser to publish and/or update Dataverse collections and datasets bypassing the external validation checks (specified by the settings above). In an event where an external script is reporting validation failures that appear to be in error, this option gives an admin with superuser privileges a quick way to publish the dataset or update a collection for the user.
37123733

3734+
.. _:FileCategories:
3735+
37133736
:FileCategories
37143737
+++++++++++++++
37153738

@@ -3811,4 +3834,22 @@ To use the current GDCC version directly:
38113834

38123835
``curl -X PUT -d 'https://gdcc.github.io/dvwebloader/src/dvwebloader.html' http://localhost:8080/api/admin/settings/:WebloaderUrl``
38133836

3837+
:CategoryOrder
3838+
++++++++++++++
3839+
3840+
A comma separated list of Category/Tag names defining the order in which files with those tags should be displayed.
3841+
The setting can include custom tag names along with the pre-defined tags(Documentation, Data, and Code are the defaults but the :ref:`:FileCategories` setting can be used to use a different set of tags).
3842+
The default is category ordering disabled.
3843+
3844+
:OrderByFolder
3845+
++++++++++++++
3846+
3847+
A true(default)/false option determining whether datafiles listed on the dataset page should be grouped by folder.
3848+
3849+
:AllowUserManagementOfOrder
3850+
+++++++++++++++++++++++++++
3851+
3852+
A true/false (default) option determining whether the dataset datafile table display includes checkboxes enabling users to turn folder ordering and/or category ordering (if an order is defined by :CategoryOrder) on and off dynamically.
3853+
38143854
.. _supported MicroProfile Config API source: https://docs.payara.fish/community/docs/Technical%20Documentation/MicroProfile/Config/Overview.html
3855+

scripts/api/data/metadatablocks/citation.tsv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
dateOfCollectionStart Start Date The date when the data collection started YYYY-MM-DD date 62 #NAME: #VALUE FALSE FALSE FALSE FALSE FALSE FALSE dateOfCollection citation
6767
dateOfCollectionEnd End Date The date when the data collection ended YYYY-MM-DD date 63 #NAME: #VALUE FALSE FALSE FALSE FALSE FALSE FALSE dateOfCollection citation
6868
kindOfData Data Type The type of data included in the files (e.g. survey data, clinical data, or machine-readable text) text 64 TRUE FALSE TRUE TRUE FALSE FALSE citation http://rdf-vocabulary.ddialliance.org/discovery#kindOfData
69-
series Series Information about the dataset series to which the Dataset belong none 65 : FALSE FALSE FALSE FALSE FALSE FALSE citation
69+
series Series Information about the dataset series to which the Dataset belong none 65 : FALSE FALSE TRUE FALSE FALSE FALSE citation
7070
seriesName Name The name of the dataset series text 66 #VALUE TRUE FALSE FALSE TRUE FALSE FALSE series citation
7171
seriesInformation Information Can include 1) a history of the series and 2) a summary of features that apply to the series textbox 67 #VALUE FALSE FALSE FALSE FALSE FALSE FALSE series citation
7272
software Software Information about the software used to generate the Dataset none 68 , FALSE FALSE TRUE FALSE FALSE FALSE citation https://www.w3.org/TR/prov-o/#wasGeneratedBy

src/main/java/edu/harvard/iq/dataverse/DataCitation.java

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public class DataCitation {
5757
private String publisher;
5858
private boolean direct;
5959
private List<String> funders;
60-
private String seriesTitle;
60+
private List<String> seriesTitles;
6161
private String description;
6262
private List<String> datesOfCollection;
6363
private List<String> keywords;
@@ -135,7 +135,7 @@ private void getCommonValuesFrom(DatasetVersion dsv) {
135135

136136
datesOfCollection = dsv.getDatesOfCollection();
137137
title = dsv.getTitle();
138-
seriesTitle = dsv.getSeriesTitle();
138+
seriesTitles = dsv.getSeriesTitles();
139139
keywords = dsv.getKeywords();
140140
languages = dsv.getLanguages();
141141
spatialCoverages = dsv.getSpatialCoverages();
@@ -330,8 +330,10 @@ public void writeAsRISCitation(OutputStream os) throws IOException {
330330
out.write("TY - DATA" + "\r\n");
331331
out.write("T1 - " + getTitle() + "\r\n");
332332
}
333-
if (seriesTitle != null) {
334-
out.write("T3 - " + seriesTitle + "\r\n");
333+
if (seriesTitles != null) {
334+
for (String seriesTitle : seriesTitles) {
335+
out.write("T3 - " + seriesTitle + "\r\n");
336+
}
335337
}
336338
/* Removing abstract/description per Request from G. King in #3759
337339
if(description!=null) {
@@ -505,12 +507,22 @@ private void createEndNoteXML(XMLStreamWriter xmlw) throws XMLStreamException {
505507
xmlw.writeCharacters(title);
506508
xmlw.writeEndElement(); // title
507509
}
508-
509-
if (seriesTitle != null) {
510-
xmlw.writeStartElement("tertiary-title");
511-
xmlw.writeCharacters(seriesTitle);
510+
511+
/*
512+
If I say just !"isEmpty" for series titles I get a failure
513+
on testToEndNoteString_withoutTitleAndAuthor
514+
with a null pointer on build -SEK 3/31/23
515+
*/
516+
if (seriesTitles != null && !seriesTitles.isEmpty() ) {
517+
xmlw.writeStartElement("tertiary-titles");
518+
for (String seriesTitle : seriesTitles){
519+
xmlw.writeStartElement("tertiary-title");
520+
xmlw.writeCharacters(seriesTitle);
521+
xmlw.writeEndElement(); // tertiary-title
522+
}
512523
xmlw.writeEndElement(); // tertiary-title
513524
}
525+
514526
xmlw.writeEndElement(); // titles
515527

516528
xmlw.writeStartElement("section");

0 commit comments

Comments
 (0)