diff --git a/dspace-api/src/main/java/cz/cuni/mff/ufal/curation/DepositLicenseCheck.java b/dspace-api/src/main/java/cz/cuni/mff/ufal/curation/DepositLicenseCheck.java new file mode 100644 index 00000000000..12a0a6cd080 --- /dev/null +++ b/dspace-api/src/main/java/cz/cuni/mff/ufal/curation/DepositLicenseCheck.java @@ -0,0 +1,75 @@ +package cz.cuni.mff.ufal.curation; + +import org.apache.commons.io.IOUtils; +import org.dspace.content.*; +import org.dspace.core.Constants; +import org.dspace.core.Context; +import org.dspace.curate.AbstractCurationTask; +import org.dspace.curate.Curator; + +public class DepositLicenseCheck extends AbstractCurationTask { + + private String msg = null; + private int status = Curator.CURATE_UNSET; + + @Override + public int perform(DSpaceObject dso) { + if(dso.getType() == Constants.ITEM){ + Item item = (Item)dso; + //everything OK unless prove otherwise + msg = String.format("Item %s OK", item.getHandle()); + status = Curator.CURATE_SUCCESS; + try { + Collection col = item.getOwningCollection(); + String colLicense = col.getLicense(); + //we have some deposited content + if(item.getBundles("ORIGINAL").length > 0 && item.getBundles("ORIGINAL")[0].getBitstreams().length > 0) { + //if we have a license check if it's ok or some junk. + if (item.getBundles("LICENSE").length == 1 && item.getBundles("LICENSE")[0].getBitstreams().length == 1) { + Bundle bundle = item.getBundles("LICENSE")[0]; + Bitstream bit = bundle.getBitstreams()[0]; + String bitLicense = IOUtils.toString(bit.retrieve(), "UTF-8"); + if (!colLicense.equals(bitLicense)) { + //This is the generic "Replace me" license, use colLicense instead + if (bitLicense != null && bitLicense.contains(placeholderLicenseText)) { + item.removeDSpaceLicense(); + Context context = new Context(); + LicenseUtils.grantLicense(context, item, colLicense); + context.complete(); + msg = String.format("Replaced default \"placeholder\" deposit license in %s", item.getHandle()); + //Something unexpected, just report + } else { + msg = String.format("Deposit license for item %s (/xmlui/bitstream/id/%s/?sequence=%s) and collection %s differ.", + item.getHandle(), bit.getID(), bit.getSequenceID(), col.getName()); + status = Curator.CURATE_FAIL; + } + } + //there is no license bundle or bitstream, add it + } else if (item.getBundles("LICENSE").length == 0 || (item.getBundles("LICENSE").length == 1 && item.getBundles("LICENSE")[0].getBitstreams().length == 0)) { + //if the bundle is there remove it + item.removeDSpaceLicense(); + Context context = new Context(); + LicenseUtils.grantLicense(context, item, colLicense); + context.complete(); + msg = String.format("Adding missing deposit license for %s", item.getHandle()); + } else { + throw new Exception("More than one LICENSE bundles or license bitstreams."); + } + } + } catch (Exception e) { + msg = String.format("Exception while running DepositLicenseCheck on %s: %s", item.getHandle(), e.getMessage()); + status = Curator.CURATE_ERROR; + } + + } else { + status = Curator.CURATE_SKIP; + } + if(msg != null){ + report(msg); + setResult(msg); + } + return status; + } + + private String placeholderLicenseText = "NOTE: PLACE YOUR OWN LICENSE HERE"; +} diff --git a/dspace-api/src/main/java/org/dspace/core/LicenseManager.java b/dspace-api/src/main/java/org/dspace/core/LicenseManager.java index d9c59549eb0..ef6085c6a7e 100644 --- a/dspace-api/src/main/java/org/dspace/core/LicenseManager.java +++ b/dspace-api/src/main/java/org/dspace/core/LicenseManager.java @@ -72,6 +72,7 @@ public static String getLicenseText(String licenseFile) InputStream is = null; InputStreamReader ir = null; BufferedReader br = null; + String license; try { is = new FileInputStream(licenseFile); diff --git a/dspace-xmlui/src/main/java/cz/cuni/mff/ufal/ContractPage.java b/dspace-xmlui/src/main/java/cz/cuni/mff/ufal/ContractPage.java new file mode 100644 index 00000000000..54c4b9efd96 --- /dev/null +++ b/dspace-xmlui/src/main/java/cz/cuni/mff/ufal/ContractPage.java @@ -0,0 +1,83 @@ +/* Created for LINDAT/CLARIN */ +package cz.cuni.mff.ufal; + +import org.apache.cocoon.ProcessingException; +import org.apache.xalan.xsltc.util.IntegerArray; +import org.dspace.app.xmlui.cocoon.AbstractDSpaceTransformer; +import org.dspace.app.xmlui.utils.UIException; +import org.dspace.app.xmlui.wing.Message; +import org.dspace.app.xmlui.wing.WingException; +import org.dspace.app.xmlui.wing.element.*; +import org.dspace.authorize.AuthorizeException; +import org.dspace.content.Collection; +import org.dspace.core.ConfigurationManager; +import org.dspace.core.I18nUtil; +import org.dspace.core.LicenseManager; +import org.xml.sax.SAXException; + +import java.io.IOException; +import java.sql.SQLException; + +import static org.apache.commons.lang3.StringUtils.isNotBlank; + +public class ContractPage extends AbstractDSpaceTransformer { + + private static final Message T_dspace_home = message("xmlui.general.dspace_home"); + private static final Message T_title = message("xmlui.ContractPage.title"); + private static final Message T_trail = message("xmlui.ContractPage.trail"); + private static final Message T_head = message("xmlui.ContractPage.head"); + private static final Message T_collection_name = message("xmlui.ContractPage.collection_name"); + private static final Message T_explain_non_localized_license = message("xmlui.ContractPage.explain_non_localized_license"); + + private static final String alternativeLicenseText; + static{ + String alternativePath = ConfigurationManager.getProperty("lr","license.alternative.path"); + if(isNotBlank(alternativePath)){ + alternativeLicenseText = LicenseManager.getLicenseText(alternativePath); + }else{ + alternativeLicenseText = null; + } + } + + + + @Override + public void addPageMeta(PageMeta pageMeta) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException { + pageMeta.addMetadata("title").addContent(T_title); + pageMeta.addTrailLink(contextPath + "/",T_dspace_home); + pageMeta.addTrail().addContent(T_trail); + } + + @Override + public void addBody(Body body) throws SAXException, WingException, UIException, SQLException, IOException, AuthorizeException, ProcessingException { + Division division = body.addDivision("licenses", "well"); + + division.setHead(T_head); + + boolean showExplanation = ConfigurationManager.getBooleanProperty("lr","license.show_localized_explanation", true); + + if(!context.getCurrentLocale().equals(I18nUtil.getDefaultLocale()) && showExplanation ){ + division.addPara().addContent(T_explain_non_localized_license); + if(isNotBlank(alternativeLicenseText)){ + addLicense(division, "default_license_alternative", T_collection_name.parameterize("Default license"), + alternativeLicenseText); + } + } + + for(Collection col : Collection.findAll(context)){ + addLicense(division, Integer.toString(col.getID()), T_collection_name.parameterize(col.getName()), col.getLicense()); + } + } + + private void addLicense(Division division, String id, Message head, String text) throws WingException { + Division license = division.addDivision("license_" + id, "well well-sm well-white"); + license.setHead(head); + TextArea textArea = license.addPara().addTextArea("license_text_" + id); + textArea.setSize(34,0); //cols are overridden by .form-control + textArea.setValue(text); + textArea.setDisabled(); + } + +} + + diff --git a/dspace-xmlui/src/main/resources/aspects/BrowseArtifacts/sitemap.xmap b/dspace-xmlui/src/main/resources/aspects/BrowseArtifacts/sitemap.xmap index 3da6b215ea9..85211820dad 100644 --- a/dspace-xmlui/src/main/resources/aspects/BrowseArtifacts/sitemap.xmap +++ b/dspace-xmlui/src/main/resources/aspects/BrowseArtifacts/sitemap.xmap @@ -26,6 +26,7 @@ collections / items / and bitstreams. + @@ -67,6 +68,11 @@ collections / items / and bitstreams. + + + + + diff --git a/dspace-xmlui/src/main/webapp/i18n/messages.xml b/dspace-xmlui/src/main/webapp/i18n/messages.xml index 3442b17f537..b3b5f5e8778 100644 --- a/dspace-xmlui/src/main/webapp/i18n/messages.xml +++ b/dspace-xmlui/src/main/webapp/i18n/messages.xml @@ -3203,5 +3203,12 @@ Funding project name EU Project Identifier (OpenAIRE) Unit + + + Distribution License Agreement + Distribution License Agreement + Distribution License Agreement + {0} + diff --git a/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/contract.html b/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/contract.html deleted file mode 100644 index db10b3291d6..00000000000 --- a/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/contract.html +++ /dev/null @@ -1,39 +0,0 @@ -
- - -

NON-EXCLUSIVE DISTRIBUTION LICENSE

-
-

By signing and submitting this license, you (the author(s) or copyright owner) -grants to Charles University in Prague (CUNI) the non-exclusive right to -reproduce, translate (as defined below), and/or distribute your submission -(including the abstract) worldwide in print and electronic format and in any -medium, including but not limited to audio or video.

- -

You agree that CUNI may, without changing the content, translate the -submission to any medium or format for the purpose of preservation.

- -

You also agree that CUNI may keep more than one copy of this submission for -purposes of security, back-up and preservation.

- -

You represent that the submission is your original work, and that you have -the right to grant the rights contained in this license. You also represent -that your submission does not, to the best of your knowledge, infringe upon -anyone's copyright.

- -

If the submission contains material for which you do not hold copyright, -you represent that you have obtained the unrestricted permission of the -copyright owner to grant CUNI the rights required by this license, and that -such third-party owned material is clearly identified and acknowledged -within the text or content of the submission.

- -

IF THE SUBMISSION IS BASED UPON WORK THAT HAS BEEN SPONSORED OR SUPPORTED -BY AN AGENCY OR ORGANIZATION OTHER THAN CUNI, YOU REPRESENT THAT YOU HAVE -FULFILLED ANY RIGHT OF REVIEW OR OTHER OBLIGATIONS REQUIRED BY SUCH -CONTRACT OR AGREEMENT.

- -

CUNI will clearly identify your name(s) as the author(s) or owner(s) of the -submission, and will not make any alteration, other than as allowed by this -license, to your submission.

-
-
- diff --git a/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/contract.xml b/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/contract.xml deleted file mode 100644 index d45b050eee4..00000000000 --- a/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/contract.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - Contract - Contract - - - diff --git a/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/cs/contract.html b/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/cs/contract.html deleted file mode 100644 index 5c81bd15185..00000000000 --- a/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/cs/contract.html +++ /dev/null @@ -1,30 +0,0 @@ -
- - -

NEVÝHRADNÍ LICENCE NA DISTRIBUCI

-
-

Podpisem a odesláním této licence vy (autor/autoři nebo vlastník/vlastníci autorských práv) udělujete Univerzitě Karlově v Praze (UK) nevýhradní právo celosvětově reprodukovat, překládat (jak je definováno níže) a/nebo distribuovat vaše příspěvky (včetně abstraktů) v tištěné i elektronické podobě a za pomoci jakéhokoli média (včetně audia nebo videa, ale i jakýchkoliv jiných médií). -

- -

Souhlasíte s tím, že UK může, pokud nezmění obsah, převést váš příspěvek do jakéhokoli formátu nebo na jakékoli médium za účelem jeho uchování. -

- -

Rovněž souhlasíte, že UK si může ponechat více než jednu kopii tohoto příspěvku pro -účely jeho bezpečnosti, zálohování a dlouhodobého uchovávání.

- -

Prohlašujete, že váš příspěvek k dílu je původní a že máte právo udělovat práva uvedená v této licenci k celému dílu. Prohlašujete také, že podle vašeho nejlepšího vědomí a svědomí, neporušujete tímto ničí autorská práva.

- -

V případě, že příspěvek obsahuje materiál, pro který nevlastníte autorská práva, -prohlašujete, že jste obdržel(i) neomezené povolení -vlastníka autorských práv udělit UK práva požadovaná touto licencí a že -takový materiál ve vlastnictví třetí strany je zřetelně označen a citován -v textu nebo obsahu vašeho příspěvku. -

- -

POKUD JE PŘÍSPĚVEK ZALOŽEN NA PRÁCI, KTERÁ BYLA SPONZOROVÁNA NEBO PODPOROVÁNA JAKOUKOLI JINOU AGENTUROU NEBO ORGANIZACÍ, NEŽ JE UK, PROHLAŠUJETE, ŽE JSTE SPLNIL(I) VŠECHNA PRÁVA NA PŘEZKOUMÁNÍ A TAKÉ JINÉ ZÁVAZKY VYŽADOVANÉ TAKOVOUTO SMLOUVOU NEBO UJEDNÁNÍM. -

- -

UK bude jasně identifikovat vaše jméno (jména) jako autora (autorů) nebo vlastníka (vlastníků) poskytnutého díla a nebude provádět žádné jiné změny tohoto díla než ty, které povoluje tato licence.

-
-
- diff --git a/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/cs/contract.xml b/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/cs/contract.xml deleted file mode 100644 index 72d10260e6c..00000000000 --- a/dspace-xmlui/src/main/webapp/themes/UFAL/lib/html/cs/contract.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - Smlouva - Smlouva - - - diff --git a/dspace/config/alternative.license b/dspace/config/alternative.license new file mode 100644 index 00000000000..3458f42849a --- /dev/null +++ b/dspace/config/alternative.license @@ -0,0 +1,28 @@ +NEVÝHRADNÍ LICENCE NA DISTRIBUCI + +Podpisem a odesláním této licence vy (autor/autoři nebo vlastník/vlastníci autorských práv) udělujete +Univerzitě Karlově v Praze (UK) nevýhradní právo celosvětově reprodukovat, +překládat (jak je definováno níže) a/nebo distribuovat vaše příspěvky (včetně abstraktů) +v tištěné i elektronické podobě a za pomoci jakéhokoli média (včetně audia nebo videa, ale i jakýchkoliv jiných médií). + +Souhlasíte s tím, že UK může, pokud nezmění obsah, převést váš příspěvek do jakéhokoli formátu +nebo na jakékoli médium za účelem jeho uchování. + +Rovněž souhlasíte, že UK si může ponechat více než jednu kopii tohoto příspěvku pro +účely jeho bezpečnosti, zálohování a dlouhodobého uchovávání. + +Prohlašujete, že váš příspěvek k dílu je původní a že máte právo udělovat práva uvedená v této licenci k celému dílu. +Prohlašujete také, že podle vašeho nejlepšího vědomí a svědomí, neporušujete tímto ničí autorská práva. + +V případě, že příspěvek obsahuje materiál, pro který nevlastníte autorská práva, +prohlašujete, že jste obdržel(i) neomezené povolení +vlastníka autorských práv udělit UK práva požadovaná touto licencí a že +takový materiál ve vlastnictví třetí strany je zřetelně označen a citován +v textu nebo obsahu vašeho příspěvku. + +POKUD JE PŘÍSPĚVEK ZALOŽEN NA PRÁCI, KTERÁ BYLA SPONZOROVÁNA NEBO PODPOROVÁNA JAKOUKOLI JINOU AGENTUROU NEBO ORGANIZACÍ, +NEŽ JE UK, PROHLAŠUJETE, ŽE JSTE SPLNIL(I) VŠECHNA PRÁVA NA PŘEZKOUMÁNÍ A TAKÉ JINÉ ZÁVAZKY +VYŽADOVANÉ TAKOVOUTO SMLOUVOU NEBO UJEDNÁNÍM. + +UK bude jasně identifikovat vaše jméno (jména) jako autora (autorů) nebo vlastníka (vlastníků) +poskytnutého díla a nebude provádět žádné jiné změny tohoto díla než ty, které povoluje tato licence. diff --git a/dspace/config/modules/curate.cfg b/dspace/config/modules/curate.cfg index 1b86b5a146e..17e73c5f419 100644 --- a/dspace/config/modules/curate.cfg +++ b/dspace/config/modules/curate.cfg @@ -22,7 +22,8 @@ plugin.named.org.dspace.curate.CurationTask = \ cz.cuni.mff.ufal.curation.OpenAIRE = openaire, \ cz.cuni.mff.ufal.curation.FixOpenAIREMetadata = fixopenaire, \ cz.cuni.mff.ufal.curation.FastLinkChecker = fastchecklinks, \ - cz.cuni.mff.ufal.curation.ProcessBitstreams = processbitstreams + cz.cuni.mff.ufal.curation.ProcessBitstreams = processbitstreams, \ + cz.cuni.mff.ufal.curation.DepositLicenseCheck = depositlicense # add new tasks here ## task queue implementation @@ -46,7 +47,8 @@ ui.tasknames = \ openaire = Check OpenAIRE items, \ fixopenaire = Fix OpenAIRE Metadata, \ checkmetadata = Check Metadata for Quality and Consistency, \ - processbitstreams = Gather additional information from bitstreams + processbitstreams = Gather additional information from bitstreams, \ + depositlicense = Check deposit license # Tasks may be organized into named groups which display together in UI drop-downs # ui.taskgroups = \ diff --git a/dspace/config/modules/lr.cfg b/dspace/config/modules/lr.cfg index 4eccfe863d1..71def5c4d4a 100644 --- a/dspace/config/modules/lr.cfg +++ b/dspace/config/modules/lr.cfg @@ -266,5 +266,13 @@ featured.service.pmltq.description = Tool for searching and browsing treebanks o shortener.enabled = ${lr.shortener.enabled} shortener.handle.prefix = ${lr.shortener.handle.prefix} +#### +# +# License branding (https://github.com/ufal/lindat-dspace/issues/289) +# +#### +license.alternative.path = ${dspace.dir}/config/alternative.license +license.show_localized_explanation = true + #build time ufal.build_time=${lr.compile.time} diff --git a/dspace/modules/xmlui/src/main/webapp/i18n/messages_cs.xml b/dspace/modules/xmlui/src/main/webapp/i18n/messages_cs.xml index 43b5df051bb..462c944444c 100644 --- a/dspace/modules/xmlui/src/main/webapp/i18n/messages_cs.xml +++ b/dspace/modules/xmlui/src/main/webapp/i18n/messages_cs.xml @@ -3465,4 +3465,12 @@ Zdroj financí (jméno projektku) EU Project Identifier (OpenAIRE) Jednotka + + + Smlouva o distribuci dat + Smlouva o distribuci dat + Smlouva o distribuci dat + {0} + Smlouva se uzavírá v angličtině a její plné znění naleznete níže. Následující český překlad je pouze orientační. V případě rozporů platí anglická verze. + diff --git a/dspace/src/main/config/build.xml b/dspace/src/main/config/build.xml index 0b78fdd68a7..37a1f829004 100644 --- a/dspace/src/main/config/build.xml +++ b/dspace/src/main/config/build.xml @@ -203,7 +203,7 @@ Common usage: - + @@ -212,7 +212,7 @@ Common usage: - + @@ -226,7 +226,7 @@ Common usage: - + @@ -275,7 +275,7 @@ Common usage: - + @@ -284,7 +284,7 @@ Common usage: - + @@ -338,12 +338,12 @@ Common usage: - + - + @@ -353,13 +353,13 @@ Common usage: - + - + @@ -369,7 +369,7 @@ Common usage: - + @@ -382,7 +382,7 @@ Common usage: - + @@ -398,7 +398,7 @@ Common usage: - + @@ -451,7 +451,7 @@ Common usage: - + @@ -464,7 +464,7 @@ Common usage: - + @@ -522,7 +522,7 @@ Common usage: - + @@ -549,7 +549,7 @@ Common usage: - + @@ -561,7 +561,7 @@ Common usage: - + @@ -571,11 +571,11 @@ Common usage: - + - + @@ -658,7 +658,7 @@ Common usage: - + @@ -666,7 +666,7 @@ Common usage: - + @@ -777,15 +777,15 @@ Common usage: file present for the initial run of "install-configs". --> - + - - + + @@ -819,7 +819,7 @@ Common usage: - + @@ -829,7 +829,7 @@ Common usage: - + @@ -840,11 +840,11 @@ Common usage: - + - +