Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MIR-1198 Support validation of PDF/A documents #900

Merged
Original file line number Diff line number Diff line change
Expand Up @@ -916,3 +916,11 @@ subselect.category.title = Kategorie ausw\u00E4hlen

user.profile.id.orcid = Ihre ORCID iD
selfRegistration.error.mailExists = Die E-Mail-Adresse wird bereits verwendet.
pdf.errorbox.warning.message=Achtung! Bei einigen Ihrer PDF/A Dokumente sind Fehler aufgetreten. Bitte stellen Sie sicher, dass ihre PDF/A Dokumente mit aktuellen und geeigneten Programmen erstellt wurden und lesen Sie die Fehlerdokumentation. Anbei finden Sie eine Liste der aufgetretenen Fehler!
pdf.errorbox.warning.heading=Warnung!
pdf.errorbox.success.heading=Erfolg!
pdf.errorbox.success.message=Ihre PDF Dokumente wurden \u00FCberpr\u00FCft und es wurden keine Fehler gefunden.
pdf.errorbox.button.info=Mehr Informationen
pdf.errorbox.button.download=Herunterladen
pdf.errorbox.conformity.level=Konformit\u00E4tstufe
pdf.errorbox.unknown.error=Keine weiteren Informationen!
Original file line number Diff line number Diff line change
Expand Up @@ -868,3 +868,11 @@ subselect.category.cancel = Cancel
subselect.category.title = Choose category

user.profile.id.orcid = Your ORCID iD
pdf.errorbox.warning.message=Attention! Errors have occurred with some of your PDF/A documents. Please make sure that your PDF/A documents were created with up-to-date and suitable programs and read the error documentation. You will find a list of the occurred errors below!
pdf.errorbox.warning.heading=Warning!
pdf.errorbox.success.heading=Success!
pdf.errorbox.success.message=Your PDF documents were verified and no errors were found.
pdf.errorbox.button.info=Learn More
pdf.errorbox.button.download=Download
pdf.errorbox.conformity.level=Conformity level
pdf.errorbox.unknown.error=No further information!
182 changes: 182 additions & 0 deletions mir-module/src/main/resources/xsl/metadata/mir-pdf-errorbox.xsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:i18n="xalan://org.mycore.services.i18n.MCRTranslation"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:mcrxsl="xalan://org.mycore.common.xml.MCRXMLFunctions"
xmlns:xalan="http://xml.apache.org/xalan"
version="1.0" exclude-result-prefixes="i18n mcrxsl">


<xsl:param name="WebApplicationBaseURL"/>
<xsl:param name="ServletsBaseURL" />
<xsl:param name="HttpSession"/>
<xsl:template match="mycoreobject" mode="displayPdfError">


<xsl:variable name="errorMessages">
<xsl:apply-templates
select="structure/derobjects/derobject"/>
</xsl:variable>




<xsl:choose>
<xsl:when test="contains($errorMessages,'Clause')">
<div class="container pdf-validation mb-3 px-0" id="accordion">
<div class="card-header bg-danger text-white">
<div class="list-group list-group-root well p-3">
<p class="h5">
<xsl:value-of select="i18n:translate('pdf.errorbox.warning.heading')"/>
</p>
<p>
<xsl:value-of select="i18n:translate('pdf.errorbox.warning.message')"/>
</p>
</div>
</div>
<div class="card-body border-left border-right border-bottom">
<xsl:copy-of select="$errorMessages"/>
</div>
</div>
</xsl:when>
<xsl:when test="string-length(normalize-space($errorMessages)) > 0 and not(contains($errorMessages,'Clause'))">
<div class="card-header bg-success text-white mb-3">
<div class="list-group list-group-root well p-3">
<p class="h5">
<xsl:value-of select="i18n:translate('pdf.errorbox.success.heading')"/>
</p>
<p>
<xsl:value-of select="i18n:translate('pdf.errorbox.success.message')"/>
</p>
</div>
</div>
</xsl:when>
</xsl:choose>
</xsl:template>


<xsl:template match="structure/derobjects/derobject">
<xsl:variable name="derivateID" select="@xlink:href"/>
<xsl:variable name="result" select="document(concat('pdfAValidator:', $derivateID))"/>
<xsl:if test="not(normalize-space($result))">
<xsl:apply-templates select="$result/derivate/file"/>
</xsl:if>
<xsl:variable name="derivbase" select="concat($ServletsBaseURL,'MCRFileNodeServlet/',$result/derivate/@id,'/')" />
<xsl:variable name="derivdir" select="concat($derivbase,$HttpSession)" />
</xsl:template>


<xsl:template match="file">
<xsl:variable name="derivate" select="../@id"/>


<xsl:variable name="name">
<xsl:call-template name="getFilename">
<xsl:with-param name="filePath" select="@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="badgecolor">
<xsl:choose>
<xsl:when test="failed">danger</xsl:when>
<xsl:otherwise>success</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="uniqueFileId" select="generate-id(.)"/>
<div id="{$derivate}{$uniqueFileId}" class="font-weight-bold d-flex list-group list-group-root">
<a onclick="$('#{$derivate}{$uniqueFileId}cbButton').toggleClass('fa-chevron-right fa-chevron-down');"
data-toggle="collapse" href="#collapse{$derivate}{$uniqueFileId}"
class="text-left d-flex flex-md-row flex-grow-1 list-group-item align-items-center">
<i id="{$derivate}{$uniqueFileId}cbButton" class="fa fa-chevron-right ml-auto mr-1"/>
<span class="flex-grow-1 font-weight-bold text-break">
<xsl:value-of select="$name"/>
</span>
<span class="badge badge-{$badgecolor} badge-pill align-self-center">
<xsl:value-of select="count(failed)"/>
</span>
</a>
</div>
<ul class="list-group collapse" id="collapse{$derivate}{$uniqueFileId}">
<li class="list-group-item d-flex flex-column flex-xl-row flex-grow-2 text-break">
<p class="flex-grow-1 col-lg-8 align-items-center">
<span class="text-muted pdf-term">
<xsl:value-of select="concat(i18n:translate('pdf.errorbox.conformity.level'),': ')"/>
</span>
<span class="pdf-value">
<xsl:value-of select="concat('PDF/A-',@flavour)"/>
</span>
</p>
<xsl:variable name="downloadLink">
<xsl:value-of select="concat($ServletsBaseURL,'MCRFileNodeServlet/',$derivate,'/',mcrxsl:encodeURIPath(@name))"/>
</xsl:variable>


<a class="btn btn-primary col" href="{$downloadLink}" target="_blank">
<xsl:value-of select="concat(i18n:translate('pdf.errorbox.button.download'),' ')"/>
<i class="fas fa-download"/>
</a>
</li>
<xsl:apply-templates select="failed"/>
</ul>
</xsl:template>


<xsl:template match="failed">
<li class="list-group-item d-flex flex-column flex-xl-row flex-grow-1 text-break">
<p class="flex-grow col-lg-8 col-md-9 align-self-center">
<span class="text-muted pdf-term">
Specification:
</span>
<span class="pdf-value">
<xsl:value-of select="concat(' ', @specification, ' ')"/>
</span>
<span class="text-muted pdf-term">
Clause:
</span>
<span class="pdf-value">
<xsl:value-of select="concat(' ', @clause, ' ')"/>
</span>
<span class="text-muted pdf-term">
Test:
</span>
<span class="pdf-value">
<xsl:value-of select="concat(' ', @testNumber, ' ')"/>
</span>
</p>
<xsl:choose>
<xsl:when test="not(@link)">
<a class="btn btn-info col" role="button" href="{@Link}" target="_blank">
<xsl:value-of select="concat(i18n:translate('pdf.errorbox.button.info'),' ')"/>
<i class="fas fa-external-link-alt"/>
</a>
</xsl:when>
<xsl:otherwise>
<div class="text-center alert alert-danger col" role="alert">
<xsl:value-of select="i18n:translate('pdf.errorbox.unknown.error')"/>
</div>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>


<xsl:template name="getFilename">
<xsl:param name="filePath" />
<xsl:variable name="rest-of" select="substring-after($filePath, '/')" />
<xsl:choose>
<xsl:when test="contains($rest-of, '/')">
<xsl:call-template name="getFilename">
<xsl:with-param name="filePath" select="$rest-of" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:if test="normalize-space($rest-of)">
<xsl:value-of select="$rest-of" />
</xsl:if>
<xsl:if test="not(normalize-space($rest-of))">
<xsl:value-of select="$filePath" />
</xsl:if>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

</xsl:stylesheet>
3 changes: 2 additions & 1 deletion mir-module/src/main/resources/xsl/metadata/mir-workflow.xsl
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

<xsl:import href="xslImport:modsmeta:metadata/mir-workflow.xsl"/>
<xsl:import href="xslImport:mirworkflow:metadata/mir-workflow.xsl"/>

<xsl:import href="mir-pdf-errorbox.xsl"/>
<xsl:param name="layout" select="'$'"/>
<xsl:param name="MIR.Workflow.Box" select="'false'"/>
<xsl:param name="MIR.Workflow.ReviewDerivateRequired" select="'true'"/>
Expand Down Expand Up @@ -127,6 +127,7 @@
Dokument submitted
</xsl:message>
</xsl:if>
<xsl:apply-templates select="." mode="displayPdfError"/>
</xsl:template>

<xsl:template match="mycoreobject" mode="creatorReview" priority="10">
Expand Down
Loading