diff --git a/mycore-base/src/main/java/org/mycore/services/zipper/MCRCompressServlet.java b/mycore-base/src/main/java/org/mycore/services/zipper/MCRCompressServlet.java index 5d2fa11a49..760ba3f58d 100644 --- a/mycore-base/src/main/java/org/mycore/services/zipper/MCRCompressServlet.java +++ b/mycore-base/src/main/java/org/mycore/services/zipper/MCRCompressServlet.java @@ -40,14 +40,20 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.jdom2.Attribute; import org.jdom2.Element; +import org.jdom2.filter.Filters; +import org.jdom2.xpath.XPathExpression; +import org.jdom2.xpath.XPathFactory; import org.mycore.access.MCRAccessManager; +import org.mycore.common.MCRConstants; import org.mycore.common.MCRException; import org.mycore.common.MCRXlink; import org.mycore.common.content.MCRContent; import org.mycore.common.content.transformer.MCRContentTransformer; import org.mycore.common.content.transformer.MCRParameterizedTransformer; import org.mycore.common.xml.MCRLayoutService; +import org.mycore.common.xml.MCRURIResolver; import org.mycore.common.xsl.MCRParameterCollector; import org.mycore.datamodel.common.MCRISO8601Date; import org.mycore.datamodel.common.MCRXMLMetadataManager; @@ -182,13 +188,32 @@ private void sendObject(MCRObjectID id, MCRServletJob job, T container) throws E .getChild(MCRObjectStructure.ELEMENT_DERIVATE_OBJECTS) .getChildren("derobject"); + XPathFactory xpathFactory = XPathFactory.instance(); + XPathExpression derivateTypeXpath = xpathFactory + .compile("classification[@classid='derivate_types']/@categid", + Filters.attribute(), null, MCRConstants.XML_NAMESPACE); + XPathExpression exportedXpath = xpathFactory + .compile(".//category/label[lang('x-export')]/@text='false'", + Filters.fboolean(), null, MCRConstants.XML_NAMESPACE); + for (Element el : li) { if (el.getAttributeValue(MCRXMLConstants.INHERITED).equals("0")) { String ownerID = el.getAttributeValue(MCRXlink.HREF, XLINK_NAMESPACE); MCRObjectID derId = MCRObjectID.getInstance(ownerID); // here the access check is tested only against the derivate if (MCRAccessManager.checkDerivateContentPermission(derId, PERMISSION_READ)) { - sendDerivate(derId, null, container); + + // export derivate if no derivate type has an 'x-export' property of 'false' + boolean exported = derivateTypeXpath.evaluate(el).stream().noneMatch(derivateTypeAttribute -> { + String derivateType = derivateTypeAttribute.getValue(); + Element derivateTypeElement = MCRURIResolver.obtainInstance() + .resolve("classification:metadata:0:children:derivate_types:" + derivateType); + return exportedXpath.evaluate(derivateTypeElement).get(0); + }); + + if (exported) { + sendDerivate(derId, null, container); + } } } } diff --git a/mycore-classeditor/src/main/resources/components/classeditor/config/mycore.properties b/mycore-classeditor/src/main/resources/components/classeditor/config/mycore.properties index aa83f962e1..74af4e701f 100644 --- a/mycore-classeditor/src/main/resources/components/classeditor/config/mycore.properties +++ b/mycore-classeditor/src/main/resources/components/classeditor/config/mycore.properties @@ -3,7 +3,7 @@ MCR.LayoutTransformerFactory.Default.Ignore=%MCR.LayoutTransformerFactory.Defaul MCR.Module-solr.linkQuery=category.top:{0} -MCR.classeditor.additionalLanguages=x-disable,x-display,x-group,x-logo,x-uri +MCR.classeditor.additionalLanguages=x-disable,x-display,x-export,x-group,x-logo,x-uri MCR.JSON.Manager.TypeAdapters.categoryType.Class=org.mycore.frontend.classeditor.MCRCategoryTypeAdapter MCR.JSON.Manager.TypeAdapters.categoryIdType.Class=org.mycore.frontend.classeditor.MCRCategoryIDTypeAdapter diff --git a/mycore-mods/src/main/resources/xsl/mods-enhancer.xsl b/mycore-mods/src/main/resources/xsl/mods-enhancer.xsl index fec5550457..a47ed88d6a 100644 --- a/mycore-mods/src/main/resources/xsl/mods-enhancer.xsl +++ b/mycore-mods/src/main/resources/xsl/mods-enhancer.xsl @@ -8,9 +8,13 @@ - - - + + + + + + + diff --git a/mycore-mods/src/main/resources/xslt/utils/mods-enhancer.xsl b/mycore-mods/src/main/resources/xslt/utils/mods-enhancer.xsl index 6f8503327b..9e44c8f448 100644 --- a/mycore-mods/src/main/resources/xslt/utils/mods-enhancer.xsl +++ b/mycore-mods/src/main/resources/xslt/utils/mods-enhancer.xsl @@ -12,9 +12,13 @@ - - - + + + + + + +